
推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载本指南聚焦于仓库内benchmark/third_party/transformers/examples/pytorch/speech-recognition/目录下的两套官方语音识别微调方案基于Connectionist Temporal ClassificationCTC的run_speech_recognition_ctc.py与基于**序列到序列Seq2Seq**的run_speech_recognition_seq2seq.py。读完本文你将掌握从数据集加载、词表构建、音频预处理、分布式训练到 WER/CER 评估的完整实操流程并能直接复用文档中的可运行命令在单卡或多卡环境微调 Wav2Vec2、XLS-R 等预训练语音模型。目录结构与环境准备本示例位于仓库的 speech-recognition 目录共包含四个文件run_speech_recognition_ctc.pyCTC 语音识别微调脚本run_speech_recognition_seq2seq.pySeq2Seq 语音识别微调脚本requirements.txt运行依赖清单README.md本文所依据的官方使用文档。运行前需安装依赖见 requirements.txtdatasets 1.18.0 torch 1.5 torchaudio librosa jiwer evaluate两个脚本内部均通过check_min_version(4.24.0)校验 Transformers 最低版本并通过require_version(datasets1.18.0, ...)校验 datasets 版本版本不满足会直接报错提示因此请确保环境中 Transformers 4.24.0、datasets 1.18.0。⚠️ 预处理进程提示README 原文强调当设置--preprocessing_num_workers大于 1 时如果数据预处理遇到问题可将环境变量OMP_NUM_THREADS设为 1 再运行OMP_NUM_THREADS1 python run_speech_recognition_ctc ...若不设置该变量训练脚本可能因线程竞争而卡死该问题与 torchaudio 的多线程加载有关。路线一CTC 语音识别微调核心思想与脚本流程CTC 路线适用于Wav2Vec2、HuBERT、XLSR-Wav2Vec2等以无监督方式在纯音频上预训练的模型。这类模型仅需极少量的带标注数据就能在自动语音识别任务上取得不错的效果。从 run_speech_recognition_ctc.py 的主流程main()见 第 368 行起可以看到完整处理链加载数据集通过datasets.load_dataset按--dataset_name、--dataset_config_name、--train_split_name/--eval_split_name加载训练与评估集第 422-458 行构建词表若未指定--tokenizer_name_or_path则调用create_vocabulary_from_data()从训练评估数据的所有唯一字符构造vocab.json并以|作为词分隔符、[UNK]/[PAD]作为特殊 token第 326-365 行清理文本用--chars_to_ignore指定的正则表达式删除标点等无语义字符并转小写第 464-481 行预处理音频prepare_dataset()通过feature_extractor完成重采样、归一化tokenizer完成文本编码并按--max_duration_in_seconds/--min_duration_in_seconds过滤超长/过短音频第 610-642 行微调用 CTC 损失ctc_loss_reduction默认为mean微调预训练模型评估指标通过--eval_metrics指定默认wer可同时给wer cer。模型类说明脚本通过AutoModelForCTC加载模型该自动类在 modeling_auto.py 第 1080 行 定义freeze_feature_encoder调用的freeze_feature_encoder()方法实现于 Wav2Vec2ForCTC用于冻结底层特征编码器、只训练顶部分类头是低资源场景下的关键加速手段。单 GPU 微调命令XLSR-Wav2Vec2 Common Voice以下命令在单张 V100 GPU 上以半精度微调facebook/wav2vec2-large-xlsr-53数据集为 Common Voice 的土耳其语tr配置python run_speech_recognition_ctc.py \ --dataset_namecommon_voice \ --model_name_or_pathfacebook/wav2vec2-large-xlsr-53 \ --dataset_config_nametr \ --output_dir./wav2vec2-common_voice-tr-demo \ --overwrite_output_dir \ --num_train_epochs15 \ --per_device_train_batch_size16 \ --gradient_accumulation_steps2 \ --learning_rate3e-4 \ --warmup_steps500 \ --evaluation_strategysteps \ --text_column_namesentence \ --length_column_nameinput_length \ --save_steps400 \ --eval_steps100 \ --layerdrop0.0 \ --save_total_limit3 \ --freeze_feature_encoder \ --gradient_checkpointing \ --chars_to_ignore , ? . ! - \; \: \ “ % ‘ ” \ --fp16 \ --group_by_length \ --push_to_hub \ --do_train --do_evalREADME 记录的参考结果单张 V100 上约1 小时 20 分钟CTC loss 约0.39词错误率WER约0.35。多 GPU8 卡微调命令使用torch.distributed.launch启动 8 进程分布式训练每卡 batch size 相应缩小为 4python -m torch.distributed.launch \ --nproc_per_node 8 run_speech_recognition_ctc.py \ --dataset_namecommon_voice \ --model_name_or_pathfacebook/wav2vec2-large-xlsr-53 \ --dataset_config_nametr \ --output_dir./wav2vec2-common_voice-tr-demo-dist \ --overwrite_output_dir \ --num_train_epochs15 \ --per_device_train_batch_size4 \ --learning_rate3e-4 \ --warmup_steps500 \ --evaluation_strategysteps \ --text_column_namesentence \ --length_column_nameinput_length \ --save_steps400 \ --eval_steps100 \ --logging_steps1 \ --layerdrop0.0 \ --save_total_limit3 \ --freeze_feature_encoder \ --gradient_checkpointing \ --chars_to_ignore , ? . ! - \; \: \ “ % ‘ ” \ --fp16 \ --group_by_length \ --push_to_hub \ --do_train --do_evalREADME 记录的参考结果8 张 V100 上约18 分钟CTC loss 约0.39WER 约0.36。数据集流式模式Streaming当数据集过大无法一次性载入内存时可使用Dataset Streaming模式微调 XLS-Rfacebook/wav2vec2-xls-r-300m。该模式对训练配置有三点硬性约束README 原文要点必须预先构建 tokenizer并通过--tokenizer_name_or_path指定流式模式下无法从数据中动态构造词表--num_train_epochs必须替换为--max_steps其他一切基于 epoch 的参数也要换成基于 step 的参数每个 epoch 无法做全量打乱因为完整数据集不会一次性驻留内存--shuffle_buffer_size控制打乱前可预下载的样本数量。4 卡 V100、半精度流式微调命令python -m torch.distributed.launch \ --nproc_per_node 4 run_speech_recognition_ctc_streaming.py \ --dataset_namecommon_voice \ --model_name_or_pathfacebook/wav2vec2-xls-r-300m \ --tokenizer_name_or_pathanton-l/wav2vec2-tokenizer-turkish \ --dataset_config_nametr \ --train_split_nametrainvalidation \ --eval_split_nametest \ --output_dirwav2vec2-xls-r-common_voice-tr-ft \ --overwrite_output_dir \ --max_steps5000 \ --per_device_train_batch_size8 \ --gradient_accumulation_steps2 \ --learning_rate5e-4 \ --warmup_steps500 \ --evaluation_strategysteps \ --text_column_namesentence \ --save_steps500 \ --eval_steps500 \ --logging_steps1 \ --layerdrop0.0 \ --eval_metrics wer cer \ --save_total_limit1 \ --mask_time_prob0.3 \ --mask_time_length10 \ --mask_feature_prob0.1 \ --mask_feature_length64 \ --freeze_feature_encoder \ --chars_to_ignore , ? . ! - \; \: \ “ % ‘ ” \ --max_duration_in_seconds20 \ --shuffle_buffer_size500 \ --fp16 \ --push_to_hub \ --do_train --do_eval \ --gradient_checkpointingREADME 记录的参考结果4 张 V100 上约3 小时 31 分钟CTC loss 约0.35WER 约0.29。流式命令中额外启用了SpecAugment 类的时间/特征掩码--mask_time_prob、--mask_time_length、--mask_feature_prob、--mask_feature_length其中mask_time_prob指沿时间轴选择为掩码起点的概率约mask_time_prob * sequence_length // mask_time_length个特征向量会被掩码mask_feature_prob同理作用于特征轴。核心参数速查表源码级默认值下表整理自 run_speech_recognition_ctc.py 中ModelArguments与DataTrainingArguments两个 dataclass 的字段定义参数默认值说明freeze_feature_encoderTrue冻结特征编码器层只训练分类头attention_dropout/activation_dropout0.0注意力与激活层 dropout 比率feat_proj_dropout/hidden_dropout/final_dropout0.0特征投影、全连接层、最终投影层 dropoutmask_time_prob0.05时间轴掩码起始概率SpecAugmentmask_time_length10时间轴掩码跨度长度mask_feature_prob0.0特征轴掩码起始概率mask_feature_length10特征轴掩码跨度长度layerdrop0.0LayerDrop 概率ctc_loss_reductionmeanCTC 损失归约方式mean或sumtrain_split_nametrainvalidation训练集 split 名称eval_split_nametest评估集 split 名称audio_column_nameaudio数据集中的音频列名text_column_nametext数据集中的文本列名eval_metrics[wer]评估指标列表如wer cermax_duration_in_seconds20.0过滤超过该时长的音频min_duration_in_seconds0.0过滤短于该时长的音频preprocessing_onlyFalse仅执行预处理并缓存跳过训练分布式超时时的推荐解法unk_token/pad_token[UNK]/[PAD]tokenizer 特殊 tokenword_delimiter_token\|词分隔 token替代空格phoneme_languageNone音素分类任务的目标语言仅音素级微调相关CTC 数据集基线实验表以下为 README 记录的基线实验结果未做超参数调优仅作为改进起点。所有表格均按“数据集 / 配置 / 预训练模型 / 评估 WER / 评估音素错误率 / GPU 配置 / 训练时长”组织TIMIT音素级数据集预训练模型评估 WER评估音素错误率GPU 配置训练时长wav2vec2-base0.21-1 GPU TITAN RTX32minunispeech-large-1500h-cv0.22-1 GPU TITAN RTX35minasapp/sew-mid-100k0.30-1 GPU TITAN RTX28minntu-spml/distilhubert0.68-1 GPU TITAN RTX26minLibrispeechclean-train.100配置预训练模型评估 WERGPU 配置训练时长microsoft/wavlm-large0.0498 GPU V1001h30minmicrosoft/wavlm-base-plus0.0688 GPU V1001h30minfacebook/wav2vec2-large-lv600.0428 GPU V1001h30minfacebook/hubert-large-ll60k0.0888 GPU V1001h30minasapp/sew-mid-100k0.1678 GPU V10054minCommon Voice配置预训练模型评估 WER音素错误率GPU 配置训练时长trfacebook/wav2vec2-large-xlsr-530.36-8 GPU V10018mintrfacebook/wav2vec2-large-xlsr-530.31-8 GPU V1001h05trfacebook/wav2vec2-large-xlsr-530.35-1 GPU V1001h20mintrfacebook/wav2vec2-xls-r-300m0.31-8 GPU V1001h05trfacebook/wav2vec2-xls-r-1b0.21-2 GPU Titan 24 GB RAM15h10tr流式模式facebook/wav2vec2-xls-r-300m0.29-4 GPU V1003h31tr音素facebook/wav2vec2-large-xls-r-300m-0.0998 GPU V10023minit音素facebook/wav2vec2-large-xls-r-300m-0.0778 GPU V10023minsv-SE音素facebook/wav2vec2-large-xls-r-300m-0.0998 GPU V10023minMultilingual Librispeech配置预训练模型评估 WERGPU 配置训练时长germanfacebook/wav2vec2-large-xlsr-530.131 GPU Titan 24 GB RAM15h04germanfacebook/wav2vec2-xls-r-300m0.151 GPU Titan 24 GB RAM15h04源码级实现细节数据流与评估词表构造create_vocabulary_from_data()对训练/评估文本做 batchedmap取所有唯一字符的并集构建vocab_dict再将空格替换为|词分隔 tokenrun_speech_recognition_ctc.py 第 326-365 行音频对齐若数据集采样率与feature_extractor.sampling_rate不一致脚本通过cast_column(..., datasets.features.Audio(sampling_rate...))自动重采样第 593-597 行动态填充DataCollatorCTCWithPadding将音频与标签分开按 batch 最长长度填充并把填充位替换为-100以在损失中屏蔽第 296-323 行指标计算compute_metrics()对预测 logits 取argmax得到 token 序列batch_decode后调用evaluate库计算 WER/CER第 660-672 行断点续训脚本通过get_last_checkpoint检测output_dir中已有 checkpoint 自动续训--overwrite_output_dir可强制从头开始第 386-398 行预处理缓存大规模数据集建议先在单机上以--preprocessing_only跑一遍预处理并缓存分布式训练直接加载缓存避免多进程预处理超时第 651-658 行。路线二Seq2Seq 语音识别微调核心思想编码器-解码器组装Wav2Vec2 BARTSeq2Seq 路线的常见做法是利用预训练语音编码模型Wav2Vec2、HuBERT、XLSR-Wav2Vec2 等搭配预训练文本解码模型如 BART通过SpeechEncoderDecoderModel组装成“语音编码器-解码器”模型后再微调。脚本run_speech_recognition_seq2seq.py使用AutoModelForSpeechSeq2Seq定义于 modeling_auto.py 第 1087 行加载模型用Seq2SeqTrainer训练损失为标准的 seq2seq 交叉熵语言建模损失与 T5/BART 一致。组装 Wav2Vec2-2-Bart 模型的完整步骤首先在hf.co上创建一个空仓库然后克隆到本地huggingface-cli repo create wav2vec2-2-bart-base git clone https://huggingface.co/your-user-name/wav2vec2-2-bart-base cd wav2vec2-2-bart-base在克隆下来的仓库目录内部运行以下 Python 脚本from transformers import SpeechEncoderDecoderModel, AutoFeatureExtractor, AutoTokenizer, Wav2Vec2Processor # checkpoints to leverage encoder_id facebook/wav2vec2-base decoder_id facebook/bart-base # load and save speech-encoder-decoder model # set some hyper-parameters for training and evaluation model SpeechEncoderDecoderModel.from_encoder_decoder_pretrained(encoder_id, decoder_id, encoder_add_adapterTrue, encoder_feat_proj_dropout0.0, encoder_layerdrop0.0, max_length200, num_beams5) model.config.decoder_start_token_id model.decoder.config.bos_token_id model.config.pad_token_id model.decoder.config.pad_token_id model.config.eos_token_id model.decoder.config.eos_token_id model.save_pretrained(./) # load and save processor feature_extractor AutoFeatureExtractor.from_pretrained(encoder_id) tokenizer AutoTokenizer.from_pretrained(decoder_id) processor Wav2Vec2Processor(feature_extractor, tokenizer) processor.save_pretrained(./)随后上传模型文件并把官方微调脚本软链接到当前目录git lfs install git add . git commit -m upload model files git pushln -s $(realpath path/to/transformers/examples/pytorch/speech-recognition/run_speech_recognition_seq2seq.py) ./为什么需要encoder_add_adapterTrue默认情况下wav2vec2-base单个输出向量的感受野约为25ms还不到一个字符而 BART 使用 sentence-piece tokenizer单个隐藏向量约代表4 个字符。为了让 Wav2Vec2 的输出与 BART 的隐藏向量在 cross-attention 中对齐脚本为 Wav2Vec2 添加了随机初始化的卷积适配器adapter沿时间维将输出再降采样 8 倍对应 Wav2Vec2 论文 4.2 节的描述。微调前的注意事项README 原文要点脚本会加载 warm-start 的模型、feature extractor 与 tokenizer预处理数据集后交给Seq2SeqTrainer必须对齐解码器词表与数据集的转录文本。例如 Librispeech 的转录只包含大写字母而 BART 主要在归一化文本上预训练因此推荐在微调时加上--do_lower_caseSeq2Seq 微调同样有OMP_NUM_THREADS1的预处理线程建议与 CTC 部分相同。单 GPU Seq2Seq 微调命令Wav2Vec2-2-Bart Librispeechpython run_speech_recognition_seq2seq.py \ --nproc_per_node 8 run_speech_recognition_seq2seq.py \ --dataset_namelibrispeech_asr \ --model_name_or_path./ \ --dataset_config_nameclean \ --train_split_nametrain.100 \ --eval_split_namevalidation \ --output_dir./ \ --preprocessing_num_workers16 \ --length_column_nameinput_length \ --overwrite_output_dir \ --num_train_epochs5 \ --per_device_train_batch_size8 \ --per_device_eval_batch_size8 \ --gradient_accumulation_steps8 \ --learning_rate3e-4 \ --warmup_steps400 \ --evaluation_strategysteps \ --text_column_nametext \ --save_steps400 \ --eval_steps400 \ --logging_steps10 \ --save_total_limit1 \ --freeze_feature_encoder \ --gradient_checkpointing \ --fp16 \ --group_by_length \ --predict_with_generate \ --generation_max_length40 \ --generation_num_beams1 \ --do_train --do_eval \ --do_lower_caseREADME 记录的参考结果单张 V100 上约5 小时交叉熵损失约0.405WER 约0.0728。命令中--model_name_or_path./指向刚组装并上传的wav2vec2-2-bart-base仓库目录。多 GPU8 卡Seq2Seq 微调命令python -m torch.distributed.launch \ --nproc_per_node 8 run_speech_recognition_seq2seq.py \ --dataset_namelibrispeech_asr \ --model_name_or_path./ \ --dataset_config_nameclean \ --train_split_nametrain.100 \ --eval_split_namevalidation \ --output_dir./ \ --preprocessing_num_workers16 \ --length_column_nameinput_length \ --overwrite_output_dir \ --num_train_epochs5 \ --per_device_train_batch_size8 \ --per_device_eval_batch_size8 \ --gradient_accumulation_steps1 \ --learning_rate3e-4 \ --warmup_steps400 \ --evaluation_strategysteps \ --text_column_nametext \ --save_steps400 \ --eval_steps400 \ --logging_steps10 \ --save_total_limit1 \ --freeze_feature_encoder \ --gradient_checkpointing \ --fp16 \ --group_by_length \ --predict_with_generate \ --do_train --do_eval \ --do_lower_caseREADME 记录的参考结果8 张 V100 上约45 分钟交叉熵损失约0.405WER 约0.0728。Seq2Seq 数据集基线实验表Librispeechclean-train.100配置编码器 解码器预训练模型评估 WERGPU 配置训练时长facebook/wav2vec2-base facebook/bart-base0.07288 GPU V10045minfacebook/wav2vec2-large-lv60 facebook/bart-large0.04868 GPU V1001h20min源码级实现细节Seq2Seq 特有机制数据规整prepare_dataset()中根据--do_lower_case默认True决定是否将转录文本转小写再经tokenizer编码为标签run_speech_recognition_seq2seq.py 第 386-397 行动态填充与 BOS 处理DataCollatorSpeechSeq2SeqWithPadding对输入与标签分别用 feature extractor 和 tokenizer 填充并将填充位替换为-100若标签首列为decoder_start_token_idBOS会将其裁掉因为解码时 BOS 会被自动补上第 192-226 行生成式评估--predict_with_generate开启生成式评估--generation_max_length与--generation_num_beams控制解码长度与 beam 数评估阶段使用trainer.evaluate(max_lengthmodel.config.max_length, num_beamsmodel.config.num_beams)compute_metrics以skip_special_tokensTrue解码并计算 WER第 431-442 行必需配置校验脚本要求model.config.decoder_start_token_id必须已定义否则直接报错提示第 357-358 行。两条路线的选型建议需要极低标注数据、以 WER 为单一目标的字/词级识别优先 CTC 路线流程最简无需额外组装编码器-解码器单卡即可复现文档中的基线需要结合语言模型解码能力、对生成质量要求更高优先 Seq2Seq 路线通过SpeechEncoderDecoderModel组装预训练语音编码器与文本解码器以交叉熵损失端到端微调但需注意--do_lower_case等词表对齐细节数据集超大、内存受限两条路线均可考虑流式加载但流式模式仅支持 CTC 脚本中的run_speech_recognition_ctc_streaming.py变体并需遵循“预构建 tokenizer、step 制训练、shuffle buffer 控制”三条约束。继续深入阅读微调脚本完整参数与主流程run_speech_recognition_ctc.py、run_speech_recognition_seq2seq.py依赖清单与版本约束requirements.txt自动模型类映射AutoModelForCTC / AutoModelForSpeechSeq2Seq 定义特征编码器冻结实现Wav2Vec2ForCTC 与 freeze_feature_encoder。赞分享推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载相关推荐opencode-anthropic-auth请求调试指南如何观察被拦截改写的fetchopencode anthropic auth请求调试指南如何观察被拦截改写的fetch opencode anthropic auth 是一个 opencoSpeechBrain 实战基于 TIMIT 训练 seq2seqAttention CTC音素识别系统SpeechBrain 实战基于 TIMIT 训练 seq2seqAttention CTC音素识别系统 导读 本文讲解 SpeechBrain 仓库人工智能深度学习语音音频NLP预训练如何在 Windows 上 3 分钟装好 RedisInsightRedis 可视化工具安装与使用完整指南如何在 Windows 上 3 分钟装好 RedisInsightRedis 可视化工具安装与使用完整指南 RedisInsight 是 Redis 官方出品数据库客户端桌面应用后端前端数据可视化上一篇告别数据库兼容噩梦ent4/ent一键切换MySQL/PostgreSQL/SQLite/Gremlin方案下一篇如何快速部署视频流转发工具5步掌握go2rtc完整配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考