人工智能大模型NLP模型训练模型推理服务【免费下载链接】OpenChatKit项目地址https://gitcode.com/gh_mirrors/op/OpenChatKit点击查看免费下载导读本文围绕 OpenChatKit 仓库中 training/README.md 展开系统讲解如何使用dist_clm_train.py对 GPT-NeoXT-Chat-Base-20B 等大模型进行分布式微调包括训练脚本的复制与自定义、全部核心命令行参数的含义与取值、多任务数据集DATASETS的定制方式。结合 finetune_GPT-NeoXT-Chat-Base-20B.sh 等真实脚本与 data_utils.py 源码读者读完后将能独立配置并启动一次多 GPU 的 pipeline 并行 数据并行训练并把自己的jsonl数据接入训练管线。一、训练系统概览目录结构与主训练脚本OpenChatKit 的训练代码全部位于仓库的 training 目录核心入口与组件如下文件/目录作用finetune_GPT-NeoXT-Chat-Base-20B.sh官方主训练脚本微调 GPT-NeoXT-Chat-Base-20Bdist_clm_train.py因果语言模型CLM分布式训练主程序dist_prefixlm_train.py前缀语言模型PrefixLM训练主程序配合 UL2R 去噪任务comm通信原语封装NCCL / GLOO / torch 后端pipeline_parallelGPipe 流水线并行实现异步实现见dist_gpipe_pipeline_async.pydata_parallel数据并行实现allreduce 等模式modules各模型结构的 Embeddings / Block / LMHead 分片实现tasks/data_loaders多任务数据加载与采样器utils参数解析、检查点、日志、事件上报等工具主训练脚本是 finetune_GPT-NeoXT-Chat-Base-20B.sh它本质上是一个参数模板 多进程启动器先组装好ARGS字符串然后用并行启动 8 个dist_clm_train.py进程分别指定--cuda-id 0..7与--rank 0..7并用trap kill 0 SIGINT保证 Ctrl-C 时能一起退出。自定义训练的标准做法不要直接修改官方脚本而是复制一份例如cp finetune_GPT-NeoXT-Chat-Base-20B.sh my_finetune.sh再修改其中的参数与环境变量。启动前必须设置的环境变量export GLOO_SOCKET_IFNAMElo # 该网卡接口必须与 --net-interface 一致 export NCCL_SOCKET_IFNAMElo # 该网卡接口必须与 --net-interface 一致 export WANDB_NAMEgptj-test # wandb 的 run 名称其中GLOO_SOCKET_IFNAME/NCCL_SOCKET_IFNAME指定 GLOO 与 NCCL 通信使用的网络接口单机多卡训练时通常设置为回环接口lo并必须与命令行参数--net-interface lo保持一致否则分布式进程将无法建立连接。WANDB_NAME仅在使用 wandb 记录训练日志时生效。此外data_utils.py 还读取两个可选环境变量SHOW_DATA默认 1设置为 0 可关闭每 64 个样本打印一次解码文本的调试输出与UL2R_DENOISE_ENABLED默认 0开启后使用 UL2R 去噪预处理。二、核心命令行参数全解训练参数分为三档必须仔细设置的、可按需调整的、通常不需要改动的。以下参数均来自 dist_clm_train.py 的 argparse 定义与官方脚本的真实取值。2.1 必须仔细设置的参数参数含义与取值示例说明--model-name按层切分的模型 ckpt 路径指向pretrained/下准备好的权重目录该目录包含pytorch_embs.pt、pytorch_{i}.pt、pytorch_lm_head.pt等按层分片的权重文件--tokenizer-name通常与--model-name相同也可使用 Hugging Face 的模型名直接加载 tokenizer--model-type{gptj}指示模型类型。从源码 dist_gpt_pp_module.py 看实际已支持gpt2、gptj、gptneox、llama四种--num-layers每张 GPU 上的 Transformer 层数例如 GPT-J 共 28 层若用 2 块 GPU 组成一条 pipeline则填 14。官方脚本按world-size / pipeline-group-size个 stage 均分总层数--embedding-dim模型的 hidden sizeGPT-J-6B 为 4096用于创建通信 bufferGPT-NeoX-20B 为 6144--dist-urlrank 0 工作节点master的 URL所有 worker 必须使用相同 URL 且都能访问。单机多卡训练可写--dist-url tcp://127.0.0.1:7033--world-sizeworker 总数满足world-size pipeline-group-size *>--model-type gptneox --optimizer adam --seed 42 --load-pretrained-model true --lr 1e-6 --seq-length 2048 --batch-size 64 --micro-batch-size 1 --gradient-accumulate-step 1 --dist-url tcp://127.0.0.1:7033 --num-layers 6 --embedding-dim 6144 --world-size 8 --pipeline-group-size 8 --data-group-size 1 --fp16 --dp-backend nccl --dp-mode allreduce --pp-mode gpipe --profiling no-profiling解读GPT-NeoX-20B 共约 44 层8 块 GPU 每块分到 6 层8 × 6 48覆盖全部层pipeline-group-size 8、data-group-size 1表示 8 块 GPU 全部在同一条流水线内不做数据并行学习率低至1e-6典型的大模型微调设置batch-size 64在 8 stage 流水线上被切成 64 个 micro-batch 依次流过。3.2 Pythia-Chat-Base-7B流水线 数据并行混合--model-type gptneox --lr 1e-5 --seq-length 2048 --batch-size 32 --num-layers 8 --embedding-dim 4096 --world-size 8 --pipeline-group-size 4 --data-group-size 2解读来自 finetune_Pythia-Chat-Base-7B.sh8 块 GPU 被划分为 2 条流水线data-group-size 2每条流水线 4 个 stage即模型被切分为 4 组 × 每卡 8 层两条流水线各持有一份完整模型副本做数据并行实现流水线并行 × 数据并行二维并行。3.3 Llama-2-7B-32K 长上下文微调--model-type llama --lr 2e-5 --seq-length 32768 --batch-size 4 --num-layers 4 --embedding-dim 4096 --world-size 8 --pipeline-group-size 8 --data-group-size 1解读来自 finetune_llama-2-7b-32k-booksum.sh 与 finetune_llama-2-7b-32k-mqa.sh这两个脚本演示了超长序列32768下的微调batch size 必须降到 4任务数据直接以远程 URL 形式传给--task-name详见第五节。从源码 dist_gpt_pp_module.py 可以看到每个 stage 实际负责的层区间为[pp_rank * num_layers, min(pp_rank * num_layers num_layers, max_layers))其中max_layers由dist_clm_train.py从AutoConfig中读取num_hidden_layers/num_layers/n_layer三选一因此--num-layers必须结合总层数合理设置。四、多任务数据采样--task-name 的完整语法OpenChatKit 的核心卖点是多任务混合训练把不同来源、不同体量的数据集按采样权重混合成一条流式数据管线。4.1 语法规则--task-name可传任务名或jsonl文件路径多任务用英文逗号,分隔每个任务名后可用冒号:附加一个采样权重默认 1.0所有权重会被归一化示例--task-name cot:0.1,/path_task0.jsonl:1.0,/path_task1.jsonl:1.0,/path_task2.jsonl:1.0cot:0.1表示cot任务以 0.1 的采样权重参与训练即每条样本以0.1 / 总权重的概率被抽中。4.2 源码实现采样如何发生在 data_utils.py 中get_train_data_loader对args.task_name.split(,)后的每个条目做解析若条目以http开头远程 URL 任务且包含两个冒号如https://...jsonl.zst:1则按prefix:task:prob拆分还原 URL 与权重只含一个冒号则权重默认 1.0否则按task:prob拆分无冒号则权重为 1.0每个任务经name_to_dataset用load_dataset(json, data_filestask, streamingTrue).shuffle(buffer_size100_000, seedargs.seed)构建流式数据集按args.seed打乱最终交给StreamDatasetList它内部为每个数据集创建cycle迭代器并用np.cumsum计算归一化权重的累积阈值每次迭代抽一个随机数p决定采自哪个任务data_utils.py。注意权重只控制抽样比例不代表任务数据在训练中出现的绝对次数StreamDatasetList还会把样本按seq_length切分不足部分依赖流式缓冲自然拼接。4.3 官方脚本的真实多任务配置finetune_GPT-NeoXT-Chat-Base-20B.sh 中DATASETS变量演示了 25 个任务的混合节选如下DATASETS\ ${DIR}/../data/OIG/files/unified_ni.jsonl:0.2,\ ${DIR}/../data/OIG/files/unified_p3.jsonl:0.5,\ ${DIR}/../data/OIG/files/unified_flan.jsonl:0.2,\ ${DIR}/../data/OIG/files/unified_chip2.jsonl:0.01,\ ${DIR}/../data/OIG/files/unified_rallio_safety_and_prosocial.jsonl:0.1,\ ${DIR}/../data/OIG/files/unified_soda_dialog.jsonl:0.1,\ ... ${DIR}/../data/OIG/files/unified_image_prompts_instructions.jsonl:0.01 \ 可以看出设计思路指令类大任务P3、FLAN、NI权重高0.2~0.5对话、安全、摘要等任务居中0.05~0.1垂直领域小任务SQL、SQuAD、数学等权重低0.01从而在训练中自动形成主次分明的混合比。这些unified_*.jsonl数据文件由 data/prepare_data.py 及 data/OIG/prepare.py 等脚本从公开数据集汇总生成。4.4 训练步数如何计算dist_clm_train.py中的calculate_training_stepsdist_clm_train.py会依据任务数据 token 总数自动推算global_batch_size (args.batch_size * args.world_size args.pipeline_group_size - 1) // args.pipeline_group_size tokens_per_batch global_batch_size * args.seq_length steps_per_epoch (token_count tokens_per_batch - 1) // tokens_per_batchtotal_steps优先采用--total-steps显式值--nepochs仅在其未设置时生效checkpoint_steps优先采用--checkpoint-steps两者都会被钳制在[1, total_steps]区间内且total_steps下限为 10。token 总数由StreamDatasetList.get_dataset_token_count()用 Hugging Facedatasets库对每个 jsonl 文件分词后求和得到。五、把你的数据加入 DATASETS要向训练流程加入自有数据只需三步创建jsonl文件每一行是一个 JSON 对象代表一条训练样本。参考 OIG 数据格式每条样本至少应包含text字段训练时由StreamDataset.get_sequence()以\n分隔后拼接 token再按seq_length切块见 data_utils.py。以带权重的方式写进--task-name假设文件位于/path_to_your_data/your_data.jsonl希望采样权重为 0.5则追加--task-name ... /path_to_your_data/your_data.jsonl:0.5重启训练脚本脚本会以流式方式读取新数据集无需预先合并或全局洗牌每个任务数据集内部按args.seed打乱任务之间按归一化权重随机交替采样。关于数据准备的补充官方脚本默认引用data/OIG/files/unified_*.jsonl这些文件需要通过 data/prepare_data.py 等脚本生成该脚本支持从 Hugging Face git 仓库、GitHub、S3/R2 等来源克隆与合并数据并完成 jsonl 统一格式化。自行准备数据时请保证 jsonl 的字段与 OIG 格式兼容核心是text字段并可参考 data/OIG/prepare.py 中的处理逻辑。六、从预训练权重到可训练分片模型准备流程--model-name指向的按层分片权重目录并非原始 HF 权重而需要一次转换。仓库 pretrained 目录为每种模型提供了准备脚本模型准备脚本GPT-NeoX-20Bpretrained/GPT-NeoX-20B/prepare.pyRedPajama-3B / 7Bpretrained/RedPajama-3B/prepare.py 等Pythia-6.9Bpretrained/Pythia-6.9B-deduped/prepare.pyLlama-2-7B-32Kpretrained/Llama-2-7B-32K-beta/prepare.py其核心逻辑在 prepare_pretrained.py用AutoModelForCausalLM.from_pretrained加载 FP16 权重后导出为与训练器一一对应的分片文件pytorch_embs.ptembed_in.weight词嵌入pytorch_{i}.pt第i个 transformer 层的完整state_dictpytorch_lm_head.ptembed_out.weightfinal_layer_norm权重。训练时dist_gpt_pp_module.py 会按流水线 stage 依次加载对应的分片--load-pretrained-model true时缺失或多余的键会打印出来供排查。若模型格式与 HF 不兼容可参考 tools/convert_to_hf_gptneox.py 与 tools/convert_to_hf_llama.py 完成互转。七、训练循环内部checkpoint、评估与 profiling从 dist_clm_train.py 的train_loop可以看到训练过程中的几个关键行为阶段分工流水线首卡rank 0 dp_rank 0负责从 DataLoader 取数、广播input_ids并驱动训练末卡计算并上报验证指标中间卡只做数据转发与前后向计算。检查点保存当global_step % checkpoint_steps 0或达到total_steps时首卡调用save_checkpoint(pipe, args)写入--checkpoint-path若配置了--checkpoint-upload-prefix还会由UploadManager异步上传到 S3。验证--evaluation-steps 0时每隔该步数运行一次test_loop末卡以CrossEntropyLoss计算验证集损失并报告valid.perplexity与valid.loss。profiling--profiling tidy_profiling时训练结束后通过 dist_gpipe_pipeline_async.py 内置的 CUDA Event 计时导出trace_json/下的 profile jsonpytorch_profiling模式则导出 Chrome Trace。日志与监控方面--train-log-backend支持print/loguru/wandb三种后端此外EventReporterevent_report.py可在训练开始、epoch 完成时上报事件配合--job-id与 AWS 凭证参数使用。八、常见问题与排查建议多卡进程起不来 / 卡在分布式初始化检查GLOO_SOCKET_IFNAME、NCCL_SOCKET_IFNAME与--net-interface三者是否一致单机多卡务必用lo或正确的内网接口。显存不足优先把--micro-batch-size设为 1再调小--batch-size也可增大--gradient-accumulate-step以等效维持较大 batch。--model-type报错确认取值属于{gpt2, gptj, gptneox, llama}之一README 写作时只保证gptj其余类型来自当前源码支持。--num-layers越界num_layers × pipeline_group_size应不小于模型总层数总层数由 HFAutoConfig自动读取。数据未生效检查 jsonl 是否每行一个合法 JSON、字段是否含text可用SHOW_DATA1打开样本打印来确认数据确实进入管线。想要 8bit 优化器先执行pip install bitsandbytes再把--optimizer设为8bit-adam。参考资料训练说明原文training/README.md主训练脚本finetune_GPT-NeoXT-Chat-Base-20B.sh其他脚本见 training 目录下的finetune_*.sh训练主程序dist_clm_train.py、dist_prefixlm_train.py数据管线training/tasks/data_loaders/data_utils.py并行实现training/pipeline_parallel/dist_gpipe_pipeline_async.py、training/data_parallel/dist_dp_allreduce.py模型分片与准备training/modules/dist_gpt_pp_module.py、pretrained/prepare_pretrained.py数据生成data/prepare_data.py、data/OIG/prepare.py赞分享人工智能大模型NLP模型训练模型推理服务【免费下载链接】OpenChatKit项目地址https://gitcode.com/gh_mirrors/op/OpenChatKit点击查看免费下载相关推荐7大开源对话模型全解析从GPT-NeoXT到Llama-2的OpenChatKit终极指南7大开源对话模型全解析从GPT NeoXT到Llama 2的OpenChatKit终极指南 OpenChatKit是一个功能强大的开源对话模型工具包提供了从人工智能大模型NLP模型训练模型推理服务OpenChatKit架构演进从GPT-NeoXT-20B到Llama-2-7B-32K的上下文窗口扩展OpenChatKit架构演进从GPT NeoXT 20B到Llama 2 7B 32K的上下文窗口扩展 引言上下文窗口扩展的技术挑战 在大型语言模型LL人工智能大模型NLP模型训练模型推理服务PEzor多格式输出完全指南EXE、DLL、服务程序打包技巧PEzor多格式输出完全指南EXE、DLL、服务程序打包技巧 PEzor作为一款开源的Shellcode与PE打包工具支持多种输出格式能够满足不同场景下的应用安全网络安全上一篇抖音去水印批量下载终极指南5分钟掌握无水印视频保存技巧下一篇Bifrost终极指南跨平台三星固件下载解密工具深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
性能测试内存分析:free、vmstat、sar命令实战解读 做性能测试的时候,内存问题大概是所有指标里最容易被误读的。之前帮一个团队排查压测过程中响应时间飙升,他们拿着free -h的结果说“内存还剩 6G,肯定不是内存的锅”,但实际应用日志里全是 GC 停顿,vmstat的wa高得离谱… · 2026/9/25 10:15:35
电力电子仿真三剑客:Simulink、PLECS、PSIM选型与实操全解析 1. 三款软件的身份定位:它们到底解决了什么问题做电力电子仿真的人,手里至少得有两三把“趁手的兵器”。Simulink、PLECS、PSIM这三款软件,圈内人习惯叫“电力电子仿真三剑客”,但很多人只是跟风装了一个,真正遇到项目… · 2026/9/25 10:15:35
MinGW-w64 GCC工具链选型指南:posix-seh-msvcrt配置与多线程异常处理实战 简介:这是一份面向 Windows 平台 C/C 开发者的 MinGW-w64 完整工具链发行包,版本为 GCC 13.2.0,采用 POSIX 线程模型与 SEH 异常处理机制,并链接 msvcrt 运行时库,适合需要在 Windows 上获得类 GNU/Linux 编译体验、又… · 2026/9/25 10:38:42
手把手教你用 Trellis + TaoToken:从安装到上手,打造 AI 编程标准流 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 10:38:05
NVIDIA计算卡真实算力与显存效能深度解析(2026版) 1. 这份报告不是“参数罗列”,而是算力决策的底层坐标系你手头正要采购一批计算卡,预算卡在300万,任务是支撑一个千卡规模的推理集群——但采购清单还没敲定,技术负责人却已经收到三份不同厂商的“性能对比PPT”:有的强… · 2026/9/25 10:37:47
运动想象BCI实战:基于ironbci库的IV2a数据集处理全流程解析 我估计你听说 pieeg-club/ironbci 时,大概率是被"运动想象"或者"IV2a"这个词勾过来的。这个项目是个纯 Python 的脑机接口工具库,主打把 BCI 竞赛经典数据集——尤其是 BCI Competition IV Dataset 2a——下载、预处理、特征提取、分… · 2026/9/25 10:37:46
台达杯电力电子AI设计竞赛:从赛题拆解到闭环验证的实操指南 1. 从“台达杯”看电力电子与AI的交叉赛道“台达杯”电力电子人工智能设计竞赛,全称是第十二届高校电力电子应用设计大赛,这个比赛在高校电力电子圈子里分量不轻。我第一次接触这个赛事是在几年前,当时带的学生团队做的是数字电源控制方向&am… · 2026/9/25 10:37:40
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37