人工智能大模型NLP模型训练模型推理服务【免费下载链接】OpenChatKit项目地址https://gitcode.com/gh_mirrors/op/OpenChatKit点击查看免费下载OpenChatKit 是一个开源的对话模型工具包仓库提供了指令微调的语言模型Pythia-Chat-Base-7B、GPT-NeoXT-Chat-Base-20B、Llama-2-7B-32K-beta、一个安全审核模型以及一个可扩展的检索系统用于从自定义知识库中获取最新上下文。本文以仓库根目录 README.md 为骨架结合源码逐步讲解如何用命令行工具与 Pythia-Chat-Base-7B 对话、如何复现该 7B 对话模型、如何微调长上下文模型 Llama-2-7B-32K-beta以及如何开启检索增强Retrieval-Augmented能力。读完本文你将能独立完成从环境搭建、数据/权重下载、分布式微调、权重格式转换到推理与监控的完整闭环。OpenChatKit 中的模型基于 OIG-43M 训练数据集微调而来该数据集由 Together、LAION 和 Ontocord.ai 三方协作构建。仓库中的代码覆盖五个核心能力训练 20B 参数对话模型 GPT-NeoXT-Chat-Base-20B见 docs/GPT-NeoXT-Chat-Base-20B.md、微调 7B 参数长上下文模型 Llama-2-7B-32K-beta、训练 7B 参数对话模型 Pythia-Chat-Base-7B、用任一对话模型测试推理以及用检索索引为模型补充额外上下文。环境准备与快速开始系统要求与依赖安装官方建议使用 Miniconda Git LFS 搭建环境。完整依赖清单在仓库根目录的 environment.yml 中包含pytorch2.0.1、pytorch-cuda11.8、cudatoolkit11.8.0、transformers4.31.0、accelerate0.21.0、faiss-gpu1.7.2、wandb0.15.5、loguru0.6.0等。安装步骤如下从官网安装 Miniconda 与 Git LFS安装 git-lfs 钩子git lfs install在base环境安装 mamba供所有环境复用conda install mamba -n base -c conda-forge用 mamba 创建 OpenChatKit 环境官方注明 mamba 比 conda 快得多mamba env create -f environment.yml激活环境conda activate OpenChatKit值得注意的是data/prepare_data.py 中的is_git_lfs_installed()会通过git lfs version检测 Git LFS 是否可用——数据集与权重下载依赖 LFS 拉取大文件因此第 2、3 步是数据准备的前提。与 Pythia-Chat-Base-7B 对话Pythia-Chat-Base-7B 是 Eleuther AI 的 Pythia-6.9B-deduped 的 7B 参数指令微调版本预训练权重以 Apache 2.0 协议发布在 Hugging Face 上。仓库提供 inference/bot.py 作为命令行测试工具它是一个交互式 shell输入文本模型即回复并自动维护对话历史作为上下文。从仓库根目录启动python inference/bot.py --model togethercomputer/Pythia-Chat-Base-7B模型加载需要一些时间加载完成后会出现欢迎提示输入Hello开始对话$ python inference/bot.py Loading /home/csris/src/github.com/togethercomputer/OpenChatKit/inference/../huggingface_models/GPT-NeoXT-Chat-Base-20B to cuda:1... Welcome to OpenChatKit shell. Type /help or /? to list commands. Hello. Hello human. 从源码看shell 的交互逻辑封装在OpenChatKitShell继承自 Python 标准库cmd.Cmd输入行若以/开头则去掉前缀作为命令执行否则自动加上say前缀进入对话do_say会把用户输入与模型回复依次压入Conversation见 inference/conversation.py再以完整历史拼出的get_raw_prompt()作为下一次生成的输入。shell 还内置了/help、/raw_say、/raw_prompt、/reset、/hyperparameters、/quit等以/开头的命令分别用于查看帮助、无历史推理、查看完整 prompt、重置对话、查看超参数和退出/quit由do_quit返回True结束cmdloop。关于命令行参数、多 GPU/指定 GPU 运行及消费级硬件部署的细节见 inference/README.md。推理参数详解inference/bot.py 的main()定义了如下参数参数含义默认值--gpu-id承载输入的主 GPU 设备 ID0--model模型名称或本地路径../huggingface_models/Pythia-Chat-Base-7B--max-tokens最大生成 token 数128--sample是否采样生成True--temperature采样温度0.6--top-ktop-k 采样40--retrieval用检索索引增强查询False-g / --gpu-vramID:RAM形式的 GPU 显存分配gpu-id必须出现在列表中无-r / --cpu-ram模型装不下 GPU 时的 CPU 内存溢出分配GiB无--no-stream关闭 token 流式输出关闭流式-g支持多个值例如-g ID_0:RAM_0 ID_1:RAM_1 ID_N:RAM_Nmax_memory字典由-g解析而来若同时给出-r还会把cpu键加入max_memory。推理底层由 inference/bot.py 的do_inference完成它用StopWordsCriteria继承transformers.StoppingCriteria在生成的文本中出现human标记时提前停止并通过stream_callback实现流式输出生成时以pad_token_ideos_token_id兜底输出会去掉 prompt 前缀后再返回。推理硬件要求与多 GPU 部署根据 inference/README.mdGPT-NeoXT-Chat-Base-20B 至少需要 41GB 空闲显存且每个 prompt 还会额外占用约 100–200MB推荐至少 80GB 总显存追求快速响应推荐至少 48GB 单卡显存默认仅使用 CUDA 0 号设备推理至少需要 1 张 GPU。多 GPU 部署时用-g ID0:MAX_VRAM ID1:MAX_VRAM ...指定每张卡可加载的最大显存GiB。例如 4 张 48GB 卡可写-g 0:10 1:12 2:12 3:12 4:12模型会先填满第一张卡再依次溢出到后续卡。需要注意MAX_VRAM仅用于加载模型不包含后续输入建议每张卡至少留 1–2GiB 余量、主卡--gpu-id指定至少留 3GiB出现 CUDA OOM 时应调低MAX_VRAM所有设备MAX_VRAM之和必须大于模型体积否则bot.py会把剩余部分自动卸载到 RAM 和磁盘此时会占满可用内存。指定特定 GPU 时--gpu-id指定的设备必须同时出现在-g列表中否则报错。示例设备 2、5 各分配 25GiB 且以 5 为主设备用--gpu-id 5 -g 2:25 5:25只用设备 1 且分配 75GiB用--gpu-id 1 -g 1:75。消费级硬件单卡 48GB、多卡合计 48GB或遭遇 OOM可加-r CPU_RAM限制模型占用的 RAM例如-g 0:12 -r 20表示 CUDA 0 加载 12GiB、RAM 加载 20GiB、其余落盘到仓库根目录的offload文件夹。注意这会显著降低推理速度。这些能力在源码中对应ChatModel.__init__见 inference/bot.py无max_memory时用device_mapauto直接加载有max_memory时先以init_empty_weights()创建空权重模型再用infer_auto_device_map生成设备映射no_split_module_classes[GPTNeoXLayer]最终通过offload_folderoffload支持溢出落盘。微调 Llama-2-7B-32K-beta长上下文对话模型Llama-2-7B-32K-beta 是 7B 参数的长上下文模型序列长度 32768可用多文档自然问答数据集multi-document natural questionsmqa和 BookSum 数据集微调。下载并转换基础模型在仓库根目录执行 pretrained/Llama-2-7B-32K-beta/prepare.pypython pretrained/Llama-2-7B-32K-beta/prepare.py权重将保存到pretrained/Llama-2-7B-32K-beta/togethercomputer_Llama-2-7B-32K-beta目录。运行微调脚本仓库提供了两个微调脚本training/finetune_llama-2-7b-32k-mqa.sh与training/finetune_llama-2-7b-32k-booksum.sh。bash training/finetune_llama-2-7b-32k-mqa.sh bash training/finetune_llama-2-7b-32k-booksum.sh从 training/finetune_llama-2-7b-32k-mqa.sh 可以看到脚本内部实际做的是设置GLOO_SOCKET_IFNAME、NCCL_SOCKET_IFNAME为lo以dist_clm_train.py为核心入口分别在--cuda-id 0..7 --rank 0..7上启动 8 个 workerworld-size 8 --pipeline-group-size 8 --data-group-size 1即纯流水线并行。关键训练配置包括数据集togethercomputer/Long-Data-Collections上的natural_questions_10_200_docs.jsonl.zst:1BookSum 脚本对应booksum.jsonl.zst:1冒号后为采样权重--model-type llama、--num-layers 4每 GPU 4 层、--embedding-dim 4096--seq-length 32768、--batch-size 4、--micro-batch-size 1、--gradient-accumulate-step 1--lr 2e-5、--total-steps 10、--checkpoint-steps 10、--warmup-steps 0--fp16混合精度、--optimizer adam、--seed 42、--load-pretrained-model true、--dist-url tcp://127.0.0.1:7033--dp-backend nccl --dp-mode allreduce --pp-mode gpipe --profiling no-profiling。三个环境变量可覆盖脚本默认值FINETUNE_TOTAL_STEPS、FINETUNE_CHECKPOINT_STEPS、FINETUNE_CHECKPOINT_PATH默认model_ckpts/llama-2-7b-32k-mqa。训练过程中checkpoint 会保存到仓库根目录的model_ckpts目录。更多自定义训练的方法见 training/README.md。训练参数说明来自 training/README.md需要设置的环境变量export GLOO_SOCKET_IFNAMElo # 需与 --net-interface 一致 export NCCL_SOCKET_IFNAMElo # 需与 --net-interface 一致 export WANDB_NAMEgptj-test # wandb 运行名需要仔细设置的核心参数--model-name按层分片的模型 checkpoint 路径--tokenizer-name通常与--model-name相同也可用 HF 模型名--model-type模型类型如gptj/gptneox/llama--num-layers每张 GPU的 Transformer 层数。例如 GPT-J 共 28 层两台 GPU 组流水线时传 14--embedding-dim模型隐藏层维度GPT-J-6B 为 4096用于创建缓冲区--dist-urlrank 0 worker 的地址所有 worker 必须可访问。单机多卡可写--dist-url tcp://127.0.0.1:7033--world-sizeworker 总数满足world-size pipeline-group-size *>mkdir huggingface_models \ python tools/convert_to_hf_llama.py \ --config-name togethercomputer/Llama-2-7B-32K-beta \ --ckpt-path model_ckpts/llama-2-7b-32k-mqa/checkpoint_10 \ --save-path huggingface_models/llama-2-7b-32k-mqa \ --n-stages 4 \ --n-layer-per-stage 8 \ --fp16其中--fp16以 fp16 加载并存储模型--n-stages与--n-layer-per-stage须与训练时的流水线配置匹配。请把model_ckpts/llama-2-7b-32k-mqa/checkpoint_10替换为model_ckpts/llama-2-7b-32k-mqa或model_ckpts/llama-2-7b-32k-booksum目录下的最新 checkpoint。从源码看tools/convert_to_hf_llama.pyload_decentralized_checkpoint会遍历每个流水线 stage从prank_{i}_checkpoint.pt加载权重stage 0 处理 embedding 与首段 Transformer 层最后一个 stage 额外加载norm.weight与lm_head.weight训练时 embedding 与 lm_head 是分开训练的其余 stage 加载各自层段同时用no_init_weights关闭随机初始化以加速空模型创建。转换完成后save_pretrained会把模型、config 与 tokenizer 一并写入--save-path。复现 Pythia-Chat-Base-7B本教程演示如何用 OIG 数据集微调 Eleuther AI 的 Pythia-6.9B-deduped从而复现 Pythia-Chat-Base-7B。下载训练数据与基础模型OIG 数据集由 LAION、Together 与 Ontocord.ai 共建。从仓库根目录执行python data/OIG/prepare.py数据将落在data/OIG/files目录。实现上data/OIG/prepare.py 会调用 data/prepare_data.py 的prepare_data以https://huggingface.co/datasets/laion/OIG为数据源克隆仓库并对*.gz文件自动解压。prepare_data还支持本地文件、GitHub/HF 仓库、S3 兼容存储通过-a/-k传 AWS 密钥或从环境变量AWS_ACCESS_KEY_ID等读取和普通 HTTP(S) URL 四类数据源。接着下载基础模型python pretrained/Pythia-6.9B-deduped/prepare.py权重将保存在pretrained/Pythia-6.9B-deduped/EleutherAI_pythia-6.9b-deduped目录。该脚本见 pretrained/Pythia-6.9B-deduped/prepare.py复用 pretrained/prepare_pretrained.py 的prepare_pretrained从 Hugging Face 拉取 config、tokenizer 与模型再把 embeddingembed_in.weight、每个 Transformer 层pytorch_{i}.pt和embed_out.weightfinal_layer_normpytorch_lm_head.pt拆分成独立文件供训练框架按层分片加载该文件也支持--offload-dir参数将模型卸载到磁盘以节省内存。可选8bit Adam如需使用 8bit-adam 优化器先安装pip install bitsandbytes # optional, to use 8bit-adam然后在训练参数中把--optimizer改为8bit-adam。训练模型training/finetune_Pythia-Chat-Base-7B.sh 配置并运行训练循环。下载完数据与基础模型后执行bash training/finetune_Pythia-Chat-Base-7B.sh该脚本使用--model-type gptneox把data/OIG/files下的 25 个任务以不同采样权重组合进--task-name例如unified_ni.jsonl:0.2、unified_p3.jsonl:0.5、unified_flan.jsonl:0.2、unified_chip2.jsonl:0.01、unified_rallio_safety_and_prosocial.jsonl:0.1等涵盖指令、对话、安全与亲社会、代码、摘要、问答、数学推理、创作等多种能力训练配置为--total-steps 20000 --checkpoint-steps 100 --lr 1e-5 --seq-length 2048 --batch-size 32 --world-size 8 --pipeline-group-size 4 --data-group-size 22 条数据并行流水线。训练循环把 checkpoint 保存到model_ckpts目录。转换权重为 Hugging Face 格式使用 tools/convert_to_hf_gptneox.pymkdir huggingface_models \ python tools/convert_to_hf_gptneox.py \ --config-name EleutherAI/pythia-6.9b-deduped \ --ckpt-path model_ckpts/Pythia-Chat-Base-7B/checkpoint_100 \ --save-path huggingface_models/Pythia-Chat-Base-7B \ --n-stages 4 \ --n-layer-per-stage 8 \ --fp16--fp16以 fp16 加载并存储模型。请把model_ckpts/Pythia-Chat-Base-7B/checkpoint_100替换为model_ckpts/Pythia-Chat-Base-7B目录下的最新 checkpoint。与 Llama 转换脚本对称load_decentralized_checkpointtools/convert_to_hf_gptneox.py逐 stage 读取prank_{i}_checkpoint.pt首 stage 载入embed_in.weight末 stage 载入final_layer_norm与embed_out。测试新模型用 OpenChatKit Shell 与新模型对话默认加载huggingface_models目录下名为 Pythia-Chat-Base-7B 的模型也可用--model覆盖python inference/bot.py python inference/bot.py --model ./huggingface_models/GPT-NeoXT-Chat-Base-20B模型加载完成后在提示符输入文本即可对话交互界面与上文一致shell 同样支持查看超参数、完整 prompt 等/命令/quit退出。训练监控默认训练脚本只打印 loss但可以通过--train-log-backend切换日志后端。Loguru为训练脚本追加--train-log-backend loguru指标将写入./logs/file_{time}.log。仓库在 environment.yml 中固定了loguru0.6.0相关实现位于 training/utils/logging_utils.py。Weights Biases先登录wandb login再在训练脚本中设置--train-log-backend wandb即可上报到 Weights Biases。仓库固定wandb0.15.5运行名可通过环境变量WANDB_NAME指定见 training/README.md。训练入口 training/dist_clm_train.py 会读取该后端参数并实例化对应的报告器。实验性功能检索增强模型Retrieval-Augmented警告检索支持目前是实验性的。retrieval 目录实现了一个用于查询 Wikipedia 的 Faiss 索引的 Python 包。核心类WikipediaIndex在 retrieval/wikipedia.py 中它用facebook/contriever-msmarco编码查询通过mean_pooling得到句向量在 Faiss 索引knn.index以 MMAP 只读方式加载中检索再对命中的句子的前后各w5条相邻句子按余弦相似度阈值w_th0.5扩展上下文。下面是让 bot 使用该索引增强查询的步骤。下载 Wikipedia 索引python data/wikipedia-3sentence-level-retrieval-index/prepare.py以--retrieval标志启动 botpython inference/bot.py --retrieval启动后 bot 会同时加载对话模型与检索索引耗时较长加载完成后所有查询都会被附加额外上下文$ python inference/bot.py --retrieval Loading /OpenChatKit/inference/../huggingface_models/GPT-NeoXT-Chat-Base-20B to cuda:0... Loading retrieval index... Welcome to OpenChatKit shell. Type /help or /? to list commands. Where is Zurich? Where is Zurich? Zurich is located in Switzerland. 这一行为在 inference/bot.py 的do_say中实现若开启--retrieval先用self._index.search(arg)检索把命中文本通过push_context_turn注入对话上下文再与用户输入拼接生成回复——这正是用检索索引为模型补充最新上下文的最小实现。更多资源与其他模型OpenChatKit 还提供更大的 20B 参数对话模型 GPT-NeoXT-Chat-Base-20B基于 Eleuther AI 的 GPT-NeoXT-Chat-Base-20B 训练训练与复现细节见 docs/GPT-NeoXT-Chat-Base-20B.md仓库还附有 docs/finetuning-RedPajama-3B.md 等文档。微调脚本方面training/finetune_GPT-NeoXT-Chat-Base-20B.sh、training/finetune_RedPajama-INCITE-Chat-3B-v1.sh 等可参考LoRA 示例见 training/lora/example。通用自定义训练的完整参数说明见 training/README.md。许可与引用仓库代码由 Together Computer 开发除非另有注明版权归 Together Computer 所有以 Apache 2.0 协议开源完整条款见 LICENSE。若在论文或产品中引用 OpenChatKit可参考以下 BibTeXsoftware{openchatkit, title {{OpenChatKit: An Open Toolkit and Base Model for Dialogue-style Applications}}, author {Together Computer}, url {https://github.com/togethercomputer/OpenChatKit} month {3}, year {2023}, version {0.15}, }结语本文从仓库根目录 README 出发完整走通了 OpenChatKit 的两条主线一是下载即用的推理路径Pythia-Chat-Base-7B bot.py 可选的 Faiss 检索增强二是从零复现/微调的训练路径数据与权重准备 → 分布式微调 → checkpoint 转 HF 格式 → 推理验证。配合仓库中的微调脚本、转换工具与源码注释你可以在此基础上替换自己的jsonl数据集、调整采样权重与并行规模微调出面向特定领域的对话模型。需要注意的是长上下文32K微调与 20B 模型推理对 GPU 显存和内存有较高要求消费级硬件请务必配合-g/-r参数规划好资源分配。赞分享人工智能大模型NLP模型训练模型推理服务【免费下载链接】OpenChatKit项目地址https://gitcode.com/gh_mirrors/op/OpenChatKit点击查看免费下载相关推荐OpenChatKit训练实战基于OIG-43M数据集微调Pythia-Chat-Base-7B完整指南OpenChatKit训练实战基于OIG 43M数据集微调Pythia Chat Base 7B完整指南 一、引言大语言模型微调的痛点与解决方案 你是否正面人工智能大模型NLP模型训练模型推理服务OpenChatKit架构演进从GPT-NeoXT-20B到Llama-2-7B-32K的上下文窗口扩展OpenChatKit架构演进从GPT NeoXT 20B到Llama 2 7B 32K的上下文窗口扩展 引言上下文窗口扩展的技术挑战 在大型语言模型LL人工智能大模型NLP模型训练模型推理服务如何用 VideoCaptioner 智能字幕助手三步把外语视频变成双语字幕视频如何用 VideoCaptioner 智能字幕助手三步把外语视频变成双语字幕视频 凌晨一点字幕组组长小周还在对着时间轴面板逐句打点识别、断句、校对、翻译四人工智能AI 应用语音音视频上一篇蘑菇书实战使用 Double-DQN 从零实现 CartPole-v0 平衡控制下一篇京东抢购助手终极教程3步实现Python自动化下单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考