def METHOD_NAME(
    self,
    stage: str,
    model_name: str,
    eval_steps: int = 10,
    num_train_epochs: int = 1,
    distributed: bool = True,
    fp16: bool = True,
):
    output_dir = self.get_auto_remove_tmp_dir("./xxx", after=False)
    args = f"""
        --model_name_or_path {model_name}
        --dataset_name hf-internal-testing/librispeech_asr_dummy
        --dataset_config_name clean
        --train_split_name validation
        --validation_split_name validation
        --output_dir {output_dir}
        --num_train_epochs {str(num_train_epochs)}
        --per_device_train_batch_size 2
        --per_device_eval_batch_size 2
        --evaluation_strategy steps
        --learning_rate 5e-4
        --warmup_steps 8
        --orthography timit
        --preprocessing_num_workers 1
        --group_by_length
        --freeze_feature_extractor
        --report_to none
        --save_steps 0
        --eval_steps {eval_steps}
        --report_to none
    """.split()
    if fp16:
        args.extend(["--fp16"])
    # currently ds_config_wav2vec2_zero.json requires "zero_optimization.find_unused_parameters": true,
    # hence the separate config files
    ds_args = f"--deepspeed {self.test_file_dir_str}/ds_config_wav2vec2_{stage}.json".split()
    script = [f"{self.examples_dir_str}/research_projects/wav2vec2/run_asr.py"]
    launcher = self.get_launcher(distributed)
    cmd = launcher + script + args + ds_args
    # keep for quick debug
    # print(" ".join([f"\nPYTHONPATH={self.src_dir_str}"] +cmd)); die
    execute_subprocess_async(cmd, env=self.get_env())
    return output_dir