FlexGen 仓库视角下的 Transformers Flax 语言模型预训练实战:从零训练 RoBERTa、GPT-2、T5 与 BART
推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载本篇技术指南以benchmark/third_party/transformers/examples/flax/language-modeling/README.md为核心文档系统讲解如何利用 JAX/Flax 后端从零预训练四种主流语言模型——双向的 RoBERTaMLM、自回归的 GPT-2CLM、span-masked 的 T5 以及去噪自编码的 BART。文中的示例脚本与配套代码均位于当前仓库的benchmark/third_party/transformers/examples/flax/language-modeling/目录下读者学完后可以掌握训练 tokenizer → 创建模型配置 → 启动预训练 → 评估与推送 Hub的完整闭环并理解 JAX 纯函数式编程、jax.pmap数据并行与 Optax 优化器在语言模型训练中的实际落地方式。一、文档定位Flax 语言模型预训练示例在仓库中的角色该文档隶属于当前仓库benchmark/third_party/transformers/这份第三方 Transformers 代码快照中。它与仓库主项目 FlexGen面向单 GPU 吞吐优先场景的大语言模型推理系统属于参照与对比的关系FlexGen 专注于推理侧的吞吐优化而这些 Flax 示例则展示了完整的上游预训练链路。阅读本指南时你既可以将这些脚本当作独立的语言模型训练工具使用也可以把它们视为理解大模型如何从无到有产生的背景知识。目录中与文档配套的脚本与文件包括run_mlm_flax.py掩码语言建模MLM训练脚本支持 BERT/RoBERTa 等双向模型run_clm_flax.py因果语言建模CLM训练脚本支持 GPT-2 等自回归模型run_t5_mlm_flax.pyT5 式 span-masked 语言建模脚本run_bart_dlm_flax.pyBART 去噪语言建模脚本t5_tokenizer_model.py面向 T5 的 SentencePiece Unigram tokenizer 训练实现requirements.txt脚本运行所需的最小依赖清单。二、为什么选择 JAX/Flax 做预训练文档开篇即点明了选型理由JAX/Flax 允许你trace 纯函数并将其编译成高效的、融合fused的加速器代码可同时在 GPU 与 TPU 上运行。用 JAX/Flax 编写的模型是不可变的immutable参数以纯函数式方式更新这使得模型并行model parallelism的实现简单且高效——因为不存在可变状态跨设备同步的问题。以 MLM 脚本为例训练主循环中可以看到这套范式在代码层面的体现见run_mlm_flax.pyjax.value_and_grad(loss_fn, has_auxTrue)一次性返回损失与梯度jax.pmap(train_step, batch, donate_argnums(0,))将训练步编译为跨设备并行的 SPMD 程序jax.lax.psum在 batch 维度上做跨设备归约得到全局 loss 与梯度jax_utils.replicate(state)将训练状态复制到每个设备。对训练吞吐有极致要求的团队例如 TPU pod 用户这套 pipeline 能最大化加速器利用率这正是文档选择在单台 TPUv3-8 上展示完整预训练流程的原因。三、环境准备与依赖安装所有示例脚本的依赖统一声明在requirements.txt中最小版本如下datasets 1.1.3 jax0.2.8 jaxlib0.1.59 flax0.3.5 optax0.0.9此外还需要transformers、tokenizers以及用于训练日志可视化的tensorboard脚本通过is_tensorboard_available()检测仅在主进程写入 SummaryWriter。若需要使用--push_to_hub还需通过huggingface-cli login完成 Hub 认证。四、通用三步工作流任何模型都要先搭好模型仓库无论训练哪种模型文档都遵循同一套三步流程先在本地搭好一个模型仓库目录训练 tokenizer在目标语料上训练分词器并保存为tokenizer.json创建配置从 Hub 上现有 checkpoint 加载配置如roberta-base的RobertaConfig覆盖vocab_size后保存到本地目录训练模型运行对应的run_*_flax.py脚本训练过程中自动把日志与权重推送回该仓库配合--push_to_hub。下面按文档顺序逐一展开四种任务的完整实操。五、掩码语言建模MLM预训练 RoBERTa-base掩码语言建模目标源自 BERT 论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。文档示例在挪威语 OSCAR 语料上从零预训练roberta-base硬件环境为单台 TPUv3-88 核。5.1 准备目录与训练 tokenizermkdir ./norwegian-roberta-base使用tokenizers库的ByteLevelBPETokenizer与 Hugging Face 官方博客How to train a new language model from scratch一脉相承在 OSCAR 挪威语全量数据上训练from datasets import load_dataset from tokenizers import trainers, Tokenizer, normalizers, ByteLevelBPETokenizer # load dataset dataset load_dataset(oscar, unshuffled_deduplicated_no, splittrain) # Instantiate tokenizer tokenizer ByteLevelBPETokenizer() def batch_iterator(batch_size1000): for i in range(0, len(dataset), batch_size): yield dataset[i: i batch_size][text] # Customized training tokenizer.train_from_iterator(batch_iterator(), vocab_size50265, min_frequency2, special_tokens[ s, pad, /s, unk, mask, ]) # Save files to disk tokenizer.save(./norwegian-roberta-base/tokenizer.json)要点说明vocab_size50265与 RoBERTa 原始词表大小一致其中 5 个位置预留给特殊 tokenmin_frequency2过滤出现频次过低的 tokenByteLevel BPE 天然兼容大小写与多语言文本无需显式 lowercasing文档提示该步骤耗时约 10 分钟视硬件而定。5.2 创建模型配置从 Hub 上的roberta-base加载配置模板仅覆盖词表大小from transformers import RobertaConfig config RobertaConfig.from_pretrained(roberta-base, vocab_size50265) config.save_pretrained(./norwegian-roberta-base)至此模型仓库搭建完毕。训练期间脚本会自动把训练日志与模型权重推送到仓库对应run_mlm_flax.py中Repository的创建与repo.push_to_hub调用。5.3 启动预训练python run_mlm_flax.py \ --output_dir./norwegian-roberta-base \ --model_typeroberta \ --config_name./norwegian-roberta-base \ --tokenizer_name./norwegian-roberta-base \ --dataset_nameoscar \ --dataset_config_nameunshuffled_deduplicated_no \ --max_seq_length128 \ --weight_decay0.01 \ --per_device_train_batch_size128 \ --per_device_eval_batch_size128 \ --learning_rate3e-4 \ --warmup_steps1000 \ --overwrite_output_dir \ --num_train_epochs18 \ --adam_beta10.9 \ --adam_beta20.98 \ --logging_steps500 \ --save_steps2500 \ --eval_steps2500 \ --push_to_hub文档给出的收敛参考在单台 TPUv3-8 上训练 18 个 epoch 后loss 与准确率分别收敛到1.78 与 0.64总耗时约 18 小时以内。5.4 源码层面的掩码策略与训练机制run_mlm_flax.py中FlaxDataCollatorForLanguageModeling.mask_tokensbenchmark/third_party/transformers/examples/flax/language-modeling/run_mlm_flax.py实现了标准的 80/10/10 掩码策略以mlm_probability默认 0.15概率随机选出待掩码 token其中 80% 替换为[MASK]tokenizer.mask_token10% 替换为词表中的随机词剩余 10% 保持不变未被选中的 token 对应 label 置为-100只对掩码 token 计算 loss特殊 tokenspecial_tokens_mask标记永远不会被掩码。训练循环的其他关键机制包括学习率调度optax.linear_schedule构建线性 warmup 到learning_rate再线性衰减到 0的双段调度边界在warmup_steps处拼接optax.join_schedules优化器默认optax.adamwAdamWdecay_mask_fn通过traverse_util.flatten_dict找出所有 LayerNorm 参数与 bias构造 mask 使权重衰减不作用于 bias 与 LayerNorm 参数也可用--adafactor切换为optax.adafactor数据并行train_batch_size per_device_train_batch_size * jax.device_count()shard切分 batch 到各设备pad_shard_unpad处理评估时的不整除检查点与推送每save_steps步主进程执行model.save_pretrainedtokenizer.save_pretrained若开启--push_to_hub则异步推送blockingFalse评估评估时额外计算 accuracy并在训练结束后把eval_results.json写入输出目录包含perplexity exp(loss)。六、因果语言建模CLM预训练 GPT-2第二部分演示自回归因果语言模型的训练在挪威语 OSCAR 语料上从零预训练随机初始化的 124M 参数gpt2同样运行在单台 TPUv3-8 上。6.1 训练 tokenizermkdir ./norwegian-gpt2from datasets import load_dataset from tokenizers import trainers, Tokenizer, normalizers, ByteLevelBPETokenizer # load dataset dataset load_dataset(oscar, unshuffled_deduplicated_no, splittrain) # Instantiate tokenizer tokenizer ByteLevelBPETokenizer() def batch_iterator(batch_size1000): for i in range(0, len(dataset), batch_size): yield dataset[i: i batch_size][text] # Customized training tokenizer.train_from_iterator(batch_iterator(), vocab_size50257, min_frequency2, special_tokens[ s, pad, /s, unk, mask, ]) # Save files to disk tokenizer.save(./norwegian-gpt2/tokenizer.json)与 MLM 不同之处在于vocab_size50257GPT-2 原始词表大小。6.2 创建配置from transformers import GPT2Config config GPT2Config.from_pretrained(gpt2, resid_pdrop0.0, embd_pdrop0.0, attn_pdrop0.0, vocab_size50257) config.save_pretrained(./norwegian-gpt2)注意这里显式将三类 dropoutresid_pdrop、embd_pdrop、attn_pdrop置为 0——预训练从零开始时通常不启用 dropout避免随机失活干扰梯度信号。6.3 启动预训练python run_clm_flax.py \ --output_dir./norwegian-gpt2 \ --model_typegpt2 \ --config_name./norwegian-gpt2 \ --tokenizer_name./norwegian-gpt2 \ --dataset_nameoscar \ --dataset_config_nameunshuffled_deduplicated_no \ --do_train --do_eval \ --block_size512 \ --per_device_train_batch_size64 \ --per_device_eval_batch_size64 \ --learning_rate5e-3 --warmup_steps1000 \ --adam_beta10.9 --adam_beta20.98 --weight_decay0.01 \ --overwrite_output_dir \ --num_train_epochs20 \ --logging_steps500 \ --save_steps2500 \ --eval_steps2500 \ --push_to_hub与 MLM 命令的关键差异--block_size512CLM 无需掩码语料按固定窗口切分为连续 token 块run_clm_flax.py中的group_texts会把全部文本拼接后切成block_size的块学习率显著更高5e-3因为自回归目标的训练信号更密集显式给出--do_train --do_eval。文档给出的收敛参考20 个 epoch 后 loss 与困惑度分别收敛到3.24 与 25.72耗时约 21 小时以内。评估阶段的困惑度即exp(eval_loss)与run_mlm_flax.py末尾的eval_results.json计算逻辑一致。七、T5 式 span-masked 语言建模预训练 T5 v1.1-base第三部分演示以 T5 论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》提出的 span-masked 目标预训练google/t5-v1_1-base。T5 是 encoder-decoder 结构掩码对象是连续的 token 片段span模型需要根据上下文重建被掩码的整段内容。7.1 训练 SentencePiece Unigram tokenizerT5 家族使用 SentencePiece 风格的 tokenizer与 BPE 不同。仓库提供t5_tokenizer_model.py中的SentencePieceUnigramTokenizer其实现细节benchmark/third_party/transformers/examples/flax/language-modeling/t5_tokenizer_model.py包括采用Unigram 语言模型算法tokenizers.models.Unigram归一化流水线Nmt→NFKC→ 将连续多个空格压缩为单个 →Lowercase预分词流水线Metaspace以▁表示空格并默认在句首加前缀空格→Digits(individual_digitsTrue)数字逐位拆分→Punctuation标点独立成 token解码器与后处理器Metaspace解码单序列自动追加/sTemplateProcessing特殊 token 约定pad0、/s1、unk2训练结束后通过add_unk_id把 unk id 写回模型配置。训练脚本如下注意目录创建方式为cd进入cd ./norwegian-t5-baseimport datasets from t5_tokenizer_model import SentencePieceUnigramTokenizer vocab_size 32_000 input_sentence_size None # Initialize a dataset dataset datasets.load_dataset(oscar, nameunshuffled_deduplicated_no, splittrain) tokenizer SentencePieceUnigramTokenizer(unk_tokenunk, eos_token/s, pad_tokenpad) # Build an iterator over this dataset def batch_iterator(input_sentence_sizeNone): if input_sentence_size is None: input_sentence_size len(dataset) batch_length 100 for i in range(0, input_sentence_size, batch_length): yield dataset[i: i batch_length][text] # Train tokenizer tokenizer.train_from_iterator( iteratorbatch_iterator(input_sentence_sizeinput_sentence_size), vocab_sizevocab_size, show_progressTrue, ) # Save files to disk tokenizer.save(./norwegian-t5-base/tokenizer.json)T5 词表大小为 32,000。由于 Unigram 训练需要多轮 EM 迭代文档提示该步骤最长可达 120 分钟是四种模型中耗时最长的。7.2 创建配置from transformers import T5Config config T5Config.from_pretrained(google/t5-v1_1-base, vocab_sizetokenizer.get_vocab_size()) config.save_pretrained(./norwegian-t5-base)这里vocab_size直接取 tokenizer 实际训练出的词表大小保证词嵌入维度与 tokenizer 严格对齐。7.3 启动预训练python run_t5_mlm_flax.py \ --output_dir./norwegian-t5-base \ --model_typet5 \ --config_name./norwegian-t5-base \ --tokenizer_name./norwegian-t5-base \ --dataset_nameoscar \ --dataset_config_nameunshuffled_deduplicated_no \ --max_seq_length512 \ --per_device_train_batch_size32 \ --per_device_eval_batch_size32 \ --adafactor \ --learning_rate0.005 \ --weight_decay0.001 \ --warmup_steps2000 \ --overwrite_output_dir \ --logging_steps500 \ --save_steps10000 \ --eval_steps2500 \ --push_to_hub关键差异--adafactorT5 训练惯例上使用 Adafactor 而非 AdamW这是文档明确给出的配置也是run_t5_mlm_flax.py中TrainingArguments.adafactor开关的典型用法max_seq_length512、batch size 32、save_steps10000间隔更大因为 T5 单步更耗时。文档给出的收敛参考3 个 epoch 后 loss 与准确率收敛到2.36 与 57.0耗时约 4.5 小时。训练统计可直接在 Hub 模型仓库的 TensorBoard 页查看。八、BART 去噪语言建模DLM预训练 BART-base第四部分演示以 BART 论文《BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension》提出的去噪目标预训练facebook/bart-base。BART 同样是 encoder-decoder 架构但与 T5 的 span-masking 不同它的输入会叠加多种噪声如 token 删除、文本旋转、span 掩码、句序打乱目标是让 decoder 重建完整原文。8.1 训练 tokenizer 与创建配置mkdir ./norwegian-bart-basetokenizer 训练与 RoBERTa 完全一致ByteLevel BPEvocab_size50265代码可复用 5.1 节示例。配置创建from transformers import BartConfig config BartConfig.from_pretrained(facebook/bart-base, vocab_size50265) config.save_pretrained(./norwegian-bart-base)8.2 启动预训练python run_bart_dlm_flax.py \ --output_dir./norwegian-bart-base \ --config_name./norwegian-bart-base \ --tokenizer_name./norwegian-bart-base \ --dataset_nameoscar \ --dataset_config_nameunshuffled_deduplicated_no \ --max_seq_length1024 \ --per_device_train_batch_size32 \ --per_device_eval_batch_size32 \ --learning_rate1e-4 \ --warmup_steps2000 \ --overwrite_output_dir \ --logging_steps500 \ --save_steps2000 \ --eval_steps2000 \ --push_to_hub注意 BART 的max_seq_length1024是四种模型中最长的上下文窗口。文档给出的收敛参考3 个 epoch 后 loss 与准确率收敛到1.36 与 0.77耗时 6 小时以内。九、训练参数全景表来自脚本源码run_mlm_flax.py、run_clm_flax.py、run_t5_mlm_flax.py中三组 dataclass 定义了全部命令行参数。下表汇总默认值与含义除特别说明外三个脚本一致TrainingArguments参数默认值说明--output_dir必填预测结果与 checkpoint 输出目录--overwrite_output_dirFalse输出目录非空时覆盖指向已有 checkpoint 目录可续训--do_train/--do_evalFalse是否执行训练 / 评估--per_device_train_batch_size8每个 GPU/TPU 核/CPU 的训练 batch--per_device_eval_batch_size8每个设备的评估 batch--learning_rate5e-5初始学习率--weight_decay0.0AdamW 权重衰减系数--adam_beta10.9Adam 一阶矩指数衰减--adam_beta20.999Adam 二阶矩指数衰减--adam_epsilon1e-8Adam epsilon--adafactorFalse用 Adafactor 替代 AdamW--num_train_epochs3.0训练总 epoch 数--warmup_steps0线性 warmup 步数--logging_steps500每 X 步记录一次日志--save_steps500每 X 步保存一次 checkpoint--eval_stepsNone每 X 步执行一次评估--seed42全局随机种子--push_to_hubFalse训练后是否上传模型到 Hub--hub_model_id/--hub_tokenNoneHub 仓库名 / 认证 token--gradient_checkpointingFalse梯度检查点省显存换速度仅 MLM 脚本支持ModelArguments参数默认值说明--model_name_or_pathNone初始化权重的 checkpoint不传则从零训练--model_typeNone从零训练时指定模型类型从FLAX_MODEL_FOR_*_LM_MAPPING键中取--config_name/--tokenizer_nameNone与模型不同的 config / tokenizer 名称或路径--cache_dirNone预训练模型缓存目录--use_fast_tokenizerTrue使用 fast tokenizer基于 tokenizers 库--dtypefloat32权重初始化与训练精度float32/float16/bfloat16--use_auth_tokenFalse访问私有模型所需的 Hub tokenDataTrainingArguments以 MLM 脚本为例参数默认值说明--dataset_name/--dataset_config_nameNone通过 datasets 库加载的数据集名与子配置名--train_file/--validation_fileNone本地 csv/json/txt 训练与验证文件--validation_split_percentage5无验证集时从训练集切出的验证比例--max_seq_lengthNone最大序列长度超过则截断默认取模型上限--preprocessing_num_workersNone预处理并行进程数--mlm_probability0.15MLM 掩码比例--pad_to_max_lengthFalse是否全部 padding 到max_seq_length--line_by_lineFalse是否按行切分序列否则拼接全部文本再切块实战提示脚本同时支持把参数写成 JSON 文件传入python run_mlm_flax.py args.json源码通过HfArgumentParser.parse_json_file支持便于在集群上固化实验配置。十、运行时评估Flax vs PyTorch/XLA vs PyTorch文档对同一个 MLM 任务在三种后端/硬件组合下做了耗时对比用于说明 Flax 在 TPU 上的编译与并行优势。所有实验均运行在 Google Cloud Platform 上任务TPU v3-8FlaxTPU v3-8PyTorch/XLA8 GPUPyTorchMLM15h32m23h46m44h14m说明GPU 实验除 JAX 变换外未做额外优化且以全精度 fp32 运行TPU v3-8 指 4 块芯片共 8 个 TPU 核8 GPU 指 8 块独立 GPU 芯片。10.1 用 PyTorch/XLA 在 TPUv3-8 上复现同一实验前提是已按 5.1/5.2 节在norwegian-roberta-base目录备好 tokenizer 与配置。在示例目录下建立符号链接把 PyTorch 版run_mlm.py与xla_spawn.py引入当前工作目录ln -s ~/transformers/examples/pytorch/language-modeling/run_mlm.py ./ ln -s ~/transformers/examples/pytorch/xla_spawn.py ./设置环境变量export XRT_TPU_CONFIGlocalservice;0;localhost:51011 unset LD_PRELOAD export NUM_TPUS8 export TOKENIZERS_PARALLELISM0 export MODEL_DIR./norwegian-roberta-base mkdir -p ${MODEL_DIR}启动训练python3 xla_spawn.py --num_cores ${NUM_TPUS} run_mlm.py --output_dir./runs \ --model_typeroberta \ --config_name${MODEL_DIR} \ --tokenizer_name${MODEL_DIR} \ --dataset_nameoscar \ --dataset_config_nameunshuffled_deduplicated_no \ --max_seq_length128 \ --weight_decay0.01 \ --per_device_train_batch_size128 \ --per_device_eval_batch_size128 \ --learning_rate3e-4 \ --warmup_steps1000 \ --overwrite_output_dir \ --num_train_epochs18 \ --adam_beta10.9 \ --adam_beta20.98 \ --do_train \ --do_eval \ --logging_steps500 \ --evaluation_strategyepoch \ --report_totensorboard \ --save_strategyno10.2 用 PyTorch 在 8 张 V100 GPU 上复现同一实验由于单张 V100 显存限制最大 batch 只能到 32Flax 版为 128必须引入gradient_accumulation弥补全局 batchln -s ~/transformers/examples/pytorch/language-modeling/run_mlm.py ./export NUM_GPUS8 export TOKENIZERS_PARALLELISM0 export MODEL_DIR./norwegian-roberta-base mkdir -p ${MODEL_DIR}python3 -m torch.distributed.launch --nproc_per_node ${NUM_GPUS} run_mlm.py \ --output_dir${MODEL_DIR} \ --model_typeroberta \ --config_name${MODEL_DIR} \ --tokenizer_name${MODEL_DIR} \ --dataset_nameoscar \ --dataset_config_nameunshuffled_deduplicated_no \ --max_seq_length128 \ --weight_decay0.01 \ --per_device_train_batch_size32 \ --per_device_eval_batch_size32 \ --gradient_accumulation4 \ --learning_rate3e-4 \ --warmup_steps1000 \ --overwrite_output_dir \ --num_train_epochs18 \ --adam_beta10.9 \ --adam_beta20.98 \ --do_train \ --do_eval \ --logging_steps500 \ --evaluation_strategysteps \ --report_totensorboard \ --save_strategynoper_device_train_batch_size32乘以gradient_accumulation4再乘以 8 卡全局有效 batch 与 Flax 版128×8等价保证对比公平。十一、从预训练到推理与 FlexGen 的关系完成上述任一预训练流程后得到的 checkpoint 即可被加载用于推理/微调。这与仓库主项目 FlexGen 构成完整的上下游链条FlexGen 专注于让大语言模型在单 GPU 上以吞吐优先的方式高效推理见仓库根目录 README.md 与flexgen/下的实现而本文所述 Flax 示例则负责模型从零到有的预训练环节。对于想在生产环境落地大模型的读者可以先用本文流程训练领域语料模型再借助 FlexGen 的思路做推理侧的吞吐优化两种能力互为补充覆盖了从训练到服务的完整生命周期。十二、常见问题与调参建议收敛不佳时优先检查什么确认vocab_size与 tokenizer 实际词表一致T5 场景务必用tokenizer.get_vocab_size()确认max_seq_length不超过模型支持上限源码中max_seq_length min(data_args.max_seq_length, tokenizer.model_max_length)显存不足降低per_device_*_batch_size或开启--gradient_checkpointing仅run_mlm_flax.py提供该开关PyTorch 对比实验则用gradient_accumulation补偿多机多卡Flax 脚本依赖jax.device_count()自动感知设备数训练 batch 会按设备数自动放大无需手工配置分布式启动器自定义语料不需要 Hub 数据集时直接用--train_file/--validation_file传入 csv/json/txt 文件即可脚本会自动按text列或第一列读取复现性--seed默认 42脚本在模型初始化与数据洗牌处均注入该种子。本文所有脚本、配置与依赖均可在当前仓库benchmark/third_party/transformers/examples/flax/language-modeling/目录下找到并直接运行建议结合源码阅读本文以获得对 JAX/Flax 训练管线最完整的理解。赞分享推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载相关推荐使用 Ray Train JaxTrainer 从零分布式训练 GPT-2JAX/Flax 规模化训练实战指南使用 Ray Train JaxTrainer 从零分布式训练 GPT 2JAX/Flax 规模化训练实战指南 预计阅读与实操时间 约 15 分钟 本指南以人工智能分布式训练强化学习任务调度模型推理服务后端使用 SpeechBrain 训练 Switchboard 语言模型Transformer LM 从零训练与预训练微调实战指南使用 SpeechBrain 训练 Switchboard 语言模型Transformer LM 从零训练与预训练微调实战指南 本篇技术指南以 SpeechB人工智能深度学习语音音频NLP预训练Fairseq 多语言 RoBERTa 预训练实战指南从多语语料预处理到 masked LM 训练Fairseq 多语言 RoBERTa 预训练实战指南从多语语料预处理到 masked LM 训练 多语言 RoBERTaMultilingual RoBE人工智能深度学习预训练NLP语音上一篇FastGPT 工作流变量替换 CPU 阻塞优化从变量驱动到模板驱动的调度热路径重构下一篇LeetCode 179 Largest Number 的 Go 题解自定义比较器快排与 ab、ba 拼接比较创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于 Hugging Face Transformers 在 MM-IMDb 上微调多模态双 Transformer(MMBT)分类模型实战指南

基于 Hugging Face Transformers 在 MM-IMDb 上微调多模态双 Transformer(MMBT)分类模型实战指南

推理引擎大模型 【免费下载链接】FlexGen Running large language models on a single GPU for throughput-oriented scenarios. 项目地址: https://gitcode.com/gh_mirrors/fl/FlexGen 点击查看 免费下载 本文以当前仓库中 mm-imdb 示例目录 的官方 README 为核心…

2026/9/25 16:55:20 阅读更多 →
React Native Skia 阴影滤镜实战:用 Shadow 组件实现投影、内阴影与拟物化设计

React Native Skia 阴影滤镜实战:用 Shadow 组件实现投影、内阴影与拟物化设计

图形学移动开发跨平台UI组件 【免费下载链接】react-native-skia High-performance React Native Graphics using Skia 项目地址: https://gitcode.com/gh_mirrors/re/react-native-skia 点击查看 免费下载 Shadow(DropShadow)是 React Nati…

2026/9/25 16:55:20 阅读更多 →
OS第二章随手记(2.1)

OS第二章随手记(2.1)

目录 一、进程阻塞的过程 二、阻塞队列 三、对时钟中断与中断的思考🤔 四、虚拟地址的思考 五、保存程序状态 六、int 0x80 的思考 七、中断源 八、陷入机制 九、MMU的简略描述 十、王道题目知识点总结 一、进程阻塞的过程 进程调用了一个系统调用函数去访…

2026/9/25 16:54:19 阅读更多 →

最新新闻

PromptX Runtime架构剖析:Docker式Agent生命周期与事件驱动SystemBus设计

PromptX Runtime架构剖析:Docker式Agent生命周期与事件驱动SystemBus设计

PromptX Runtime架构剖析:Docker式Agent生命周期与事件驱动SystemBus设计 【免费下载链接】PromptX PromptX 领先的AI 智能体上下文平台 | PromptX Leading AI Agent Context Platform 项目地址: https://gitcode.com/Deepractice/PromptX Prom…

2026/9/25 17:39:49 阅读更多 →
Ubuntu 22.04 LTS开发环境实战配置指南

Ubuntu 22.04 LTS开发环境实战配置指南

1. 这不是“又一篇Ubuntu安装教程”,而是一份我亲手踩过27次坑、重装过14台机器后整理的22.04 LTS实战手册你搜“Ubuntu 22.04 LTS安装配置”时,看到的大多是截图堆砌、命令复制粘贴、步骤编号到5就戛然而止的“半成品”。有人装完连中文输入法都打不出字…

2026/9/25 17:39:49 阅读更多 →
Lottery 抽奖系统部署实战:Docker 安装 Nacos 注册中心并接入 Dubbo 服务注册

Lottery 抽奖系统部署实战:Docker 安装 Nacos 注册中心并接入 Dubbo 服务注册

文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、…

2026/9/25 17:39:49 阅读更多 →
使用 GDB 与 SWD 调试探针对 PX4 固件进行交互式调试:从连接到实战

使用 GDB 与 SWD 调试探针对 PX4 固件进行交互式调试:从连接到实战

嵌入式物联网机器人自动驾驶智能硬件 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 点击查看 免费下载 本指南以 PX4-Autopilot 官方调试文档(gdb_debugging.md)为核心…

2026/9/25 17:39:49 阅读更多 →
RisingWave 自定义 Lint 体系实战:基于 cargo dylint 的 Rust 代码规范与 Clippy 扩展

RisingWave 自定义 Lint 体系实战:基于 cargo dylint 的 Rust 代码规范与 Clippy 扩展

数据库流处理后端数据工程 【免费下载链接】risingwave Event streaming platform for agentic AI. Continuously ingest, transform, and serve event streams in real time, at scale. 项目地址: https://gitcode.com/gh_mirrors/ri/risingwave 点击查看 免费下载…

2026/9/25 17:39:48 阅读更多 →
AI提示词帮你搞定任务优先级排序,告别决策瘫痪

AI提示词帮你搞定任务优先级排序,告别决策瘫痪

1. 为什么“事情太多先做什么”是个真问题你有没有过这种早晨:闹钟响了第三遍才爬起来,手机一解锁,微信未读99,邮箱里躺着三封标红的“紧急”,待办清单上密密麻麻列了二十多条,脑子里同时转着“下午要交周报…

2026/9/25 17:38:48 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →