Yi 开源双语大模型全栈实践指南:从本地推理、量化部署到微调
【免费下载链接】YiA series of large language models trained from scratch by developers @01-ai项目地址: https://gitcode.com/GitHub_Trending/yi/Yi
本指南以 01.AI 开源的 Yi 系列大语言模型为核心,系统讲解其模型体系、五种本地部署路径(pip、Docker、conda-lock、llama.cpp、Web Demo)以及微调与量化落地方法,并下沉到本仓库的脚本与源码级实现,帮助你在真实硬件约束下把 Yi 模型跑起来、调起来、用起来。读完本文,你将掌握从环境准备、权重下载、Chat/Base 模型推理,到 SFT 微调、GPTQ/AWQ 量化与软硬件选型的完整闭环。
Yi 系列模型是什么
Yi 系列是由 01.AI)。
在模型体系上,Yi 分为Chat(对话)与Base(基座)两大类,并提供 4-bit(AWQ 量化)与 8-bit(GPTQ 量化)版本,量化模型可直接部署在消费级 GPU(如 3090、4090)上。
模型清单与下载渠道
Chat 模型:
| 模型 | 说明 |
|---|---|
| Yi-34B-Chat | 34B 对话模型 |
| Yi-34B-Chat-4bits | AWQ 4-bit 量化版 |
| Yi-34B-Chat-8bits | GPTQ 8-bit 量化版 |
| Yi-6B-Chat | 6B 对话模型 |
| Yi-6B-Chat-4bits | AWQ 4-bit 量化版 |
| Yi-6B-Chat-8bits | GPTQ 8-bit 量化版 |
Base 模型:
| 模型 | 说明 |
|---|---|
| Yi-34B | 34B 基座模型 |
| Yi-34B-200K | 上下文窗口扩展至 200K(约相当于 40 万汉字) |
| Yi-9B | 以 Yi-6B 为基础继续训练,额外使用 0.8T tokens |
| Yi-9B-200K | Yi-9B 的 200K 长上下文版本 |
| Yi-6B | 6B 基座模型 |
| Yi-6B-200K | 6B 的 200K 长上下文版本 |
官方权重可从 Hugging Face(01-ai 组织)、ModelScope(01ai 组织)与 WiseModel 三个渠道下载。若需回退到 2023-11-05 发布的旧版 Yi-34B-200K 权重,可在下载目录执行git checkout 069cd341d60f4ce4b07ec394e82b79e94f656cf。
各尺寸定位与训练数据
| 模型系列 | 定位 | 默认上下文窗口 | 预训练 tokens | 训练数据截止 |
|---|---|---|---|---|
| 6B 系列 | 适合个人与学术用途 | 4K | 3T | 2023 年 6 月 |
| 9B 系列 | Yi 系列中代码与数学能力最强 | 4K | Yi-6B 基础上续训 0.8T | 2023 年 6 月 |
| 34B 系列 | 适合个人、学术及商业(尤其中小企业),性价比高且具备涌现能力 | 4K | 3T | 2023 年 6 月 |
提示:Chat 模型经过 SFT 训练,回答多样性更高,更适合创意类等下游任务;但这种多样性也可能放大幻觉、重新生成时的不确定性以及多步任务中的累积误差。若需要更连贯一致的输出,建议调整
temperature、top_p、top_k等生成参数。
快速开始:先选择你的路径
Yi 官方提供了一张部署路线决策图,帮助你根据硬件条件快速定位合适的方式(assets/img/quick_start_path.png):
- 本地部署 + 资源充足(如 NVIDIA A800 80GB):选择 pip、Docker 或 conda-lock;
- 本地部署 + 资源有限(如 MacBook Pro):选择 llama.cpp 运行量化模型;
- 不想本地部署:可通过在线 API(官方 Yi API、Replicate)或 Playground 体验;
- 只想聊天:可直接使用 Hugging Face 上的 Yi-34B-Chat Space 等在线服务。
方式一:pip 本地推理(以 A800 跑 Yi-34B-Chat 为例)
Step 0:前置条件
- 安装 Python 3.10 或更高版本;
- 如需运行其他 Yi 模型,请参考下文"部署软硬件要求"核对显存。
Step 1:准备环境
git clone <你的 Yi 仓库地址> cd Yi pip install -r requirements.txt仓库根目录的 requirements.txt 锁定了核心依赖,其中包括transformers>=4.36.2、gradio>=4.13.0、torch==2.0.1、accelerate、sentencepiece、deepspeed、datasets、protobuf>=4.25.1等,覆盖推理、Web Demo 与微调所需组件。
Step 2:下载模型权重
从 Hugging Face、ModelScope 或 WiseModel 下载对应模型的权重与 tokenizer 文件。
Step 3:执行推理
3.1 Chat 模型推理
创建quick_start.py:
from transformers import AutoModelForCausalLM, AutoTokenizer model_path = '<your-model-path>' tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False) # 自 transformers 4.35.0 起,GPTQ/AWQ 量化模型可直接用 AutoModelForCausalLM 加载 model = AutoModelForCausalLM.from_pretrained( model_path, device_map="auto", torch_dtype='auto' ).eval() # Prompt content: "hi" messages = [ {"role": "user", "content": "hi"} ] input_ids = tokenizer.apply_chat_template(conversation=messages, tokenize=True, add_generation_prompt=True, return_tensors='pt') output_ids = model.generate(input_ids.to('cuda')) response = tokenizer.decode(output_ids[0][input_ids.shape[1]:], skip_special_tokens=True) # Model response: "Hello! How can I assist you today?" print(response)运行:
python quick_start.py预期输出:
Hello! How can I assist you today?要点说明:
use_fast=False与 Yi 的 tokenizer 配置匹配,避免 fast tokenizer 兼容问题;apply_chat_template将消息列表渲染为 Chat 模型的对话格式并追加生成提示符(add_generation_prompt=True);- 解码时通过
input_ids.shape[1]:截断输入部分,只保留新生成的 token。
3.2 Base 模型推理(Yi-34B)
Base 模型推理步骤与 Chat 模型类似,但直接使用仓库提供的现成脚本 demo/text_generation.py:
python demo/text_generation.py --model <your-model-path>该脚本通过argparse暴露了完整参数(见 demo/text_generation.py):
--model:本地模型路径或 Hugging Face 模型名,默认01-ai/Yi-6B;--max-tokens:最大生成 token 数,默认 256;--streaming:开启流式输出(内部使用TextStreamer);--prompt:起始提示词;--cpu:仅用 CPU 运行(此时device_map="cpu",否则为"auto")。
脚本内部还预留了do_sample、repetition_penalty、no_repeat_ngram_size、temperature、top_k、top_p等生成参数的注释开关(demo/text_generation.py),可按需取消注释。
3.3 Base 模型推理(Yi-9B)
from transformers import AutoModelForCausalLM, AutoTokenizer MODEL_DIR = "01-ai/Yi-9B" model = AutoModelForCausalLM.from_pretrained(MODEL_DIR, torch_dtype="auto") tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR, use_fast=False) input_text = "# write the quick sort algorithm" inputs = tokenizer(input_text, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_length=256) print(tokenizer.decode(outputs[0], skip_special_tokens=True))方式二:Docker 部署
在 A800 或 4×4090 上运行 Yi-34B-Chat 的步骤:
Step 0 前置条件:安装 Docker 与 nvidia-container-toolkit。
Step 1 启动容器:
docker run -it --gpus all \ -v <your-model-path>:/models ghcr.io/01-ai/yi:latest也可以从registry.lingyiwanwu.com/ci/01-ai/yi:latest拉取镜像。仓库根目录的 Dockerfile 显示,镜像基于 NVIDIA CUDA 11.8(ubuntu22.04)构建,内部通过 micromamba 依据 conda-lock.yml 创建名为yi的 conda 环境并安装全部依赖,工作目录为/home/yi/workspace/Yi。
Step 2 执行推理:
- Chat 模型:步骤同 pip 方式,唯一区别是
model_path需改为容器内的模型挂载路径<your-model-mount-path>; - Base 模型:同样将
--model参数改为挂载路径。
方式三:conda-lock 可复现环境
如需完全可复现的 conda 环境,可基于仓库根目录的 conda-lock.yml(内含各依赖的精确版本)创建环境:
- 按 micromamba 官方文档安装 micromamba;
- 执行:
micromamba install -y -n yi -f conda-lock.yml该命令会创建名为yi的环境并安装全部锁定版本依赖。
方式四:llama.cpp 在低资源设备上运行量化模型
以下教程(完整版见 docs/README_llama.cpp.md)演示如何在 16GB 内存的 MacBook Pro(Apple M2 Pro)上运行 2-bit 量化模型Yi-chat-6B-2bits(GGUF 格式)。
Step 0 前置条件:安装 git-lfs。
Step 1 克隆 llama.cpp:
git clone git@github.com:ggerganov/llama.cpp.gitStep 2 下载 Yi 量化模型(先仅拉取指针,再按需拉取单个 GGUF 文件):
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/XeIaso/yi-chat-6B-GGUF git-lfs pull --include yi-chat-6b.Q2_K.ggufStep 3 推理,有两种方式:
- 终端方式(默认 completion 模式;更多生成参数见
./main -h):
make -j4 && ./main -m /Users/yu/yi-chat-6B-GGUF/yi-chat-6b.Q2_K.gguf -p "How do you feed your pet fox? Please answer this question in 6 simple steps:\nStep 1:" -n 384 -e- Web 方式(启动本地服务后浏览器访问
http://0.0.0.0:8080):
cd llama.cpp ./server --ctx-size 2048 --host 0.0.0.0 --n-gpu-layers 64 --model /Users/yu/yi-chat-6B-GGUF/yi-chat-6b.Q2_K.gguf启动日志中可以看到freq_base = 5000000.0(对应 Yi 的长上下文 RoPE 基数)、ggml_metal_init: found device: Apple M2 Pro等关键信息,说明 Metal 后端成功加载、KV cache 与计算缓冲均已分配完毕(docs/README_llama.cpp.md 中有完整日志示例):
随后在输入框提问"如何用 6 步喂食宠物狐狸"等自然语言问题,即可获得流式回答(对应截图见 assets/img/yi_llama_cpp2.png)。
方式五:Web Demo 聊天界面
Yi 官方为Chat 模型提供了基于 Gradio 的 Web UI(注意:Base 模型不支持该场景)。前置步骤同"pip 方式"的 Step 1、Step 2,然后执行:
python demo/web_demo.py -c <your-model-path>将控制台输出的地址粘贴到浏览器即可打开聊天界面:
从源码看(demo/web_demo.py),该 Demo 具备以下工程细节:
- 支持多轮对话:
predict将历史消息组装为role: user/assistant结构,通过apply_chat_template渲染(demo/web_demo.py); - 自定义
StopOnTokens停止条件:遇到<|endoftext|>、<|im_start|>、<|im_end|>、<|im_sep|>等特殊 token 即停止生成(demo/web_demo.py); - 流式输出:使用
TextIteratorStreamer配合后台线程实现 token 级流式渲染; - 可调参数:
Maximum length(最大长度,0~32768)、Top P(默认 0.8)、Temperature(默认 0.6),并内置repetition_penalty=1.2; - 命令行参数:
-c/--checkpoint-path(默认01-ai/Yi-6B-Chat)、--cpu-only、--share、--inbrowser、--server-port(默认 8111)、--server-name(默认 127.0.0.1)。
微调:基于 SFT 定制专属模型
仓库在 finetune 目录下提供了完整的 SFT 微调实现,一行命令即可上手:
bash finetune/scripts/run_sft_Yi_6b.sh微调完成后,可对比基座模型与微调模型的回答效果:
bash finetune/scripts/run_eval.sh准备自定义数据集
默认使用 BAAI/COIG 的示例数据集,也可按如下jsonl格式准备自己的数据(一条记录即一个 prompt 与参考答案):
{ "prompt": "Human: Who are you? Assistant:", "chosen": "I'm Yi." }仓库内置的示例数据集位于 finetune/yi_example_dataset/data,包含train.jsonl与eval.jsonl两个文件。
两种运行环境
方式 A:Docker 挂载(挂载自定义数据与输出目录):
docker run -it \ -v /path/to/save/finetuned/model/:/finetuned-model \ -v /path/to/train.jsonl:/yi/finetune/data/train.json \ -v /path/to/eval.jsonl:/yi/finetune/data/eval.json \ ghcr.io/01-ai/yi:latest \ bash finetune/scripts/run_sft_Yi_6b.sh方式 B:本地 conda 环境:
conda create -n dev_env python=3.10 -y conda activate dev_env pip install torch==2.0.1 deepspeed==0.10 tensorboard transformers datasets sentencepiece accelerate ray==2.7硬件要求
- Yi-6B:推荐单节点 4 卡,单卡显存 > 60GB;
- Yi-34B:由于 zero-offload 技术会大量消耗 CPU 内存,务必用
CUDA_VISIBLE_DEVICES限制 GPU 数量(finetune/scripts/run_sft_Yi_34b.sh 中已设置为0,1,2,3)。典型配置为 8 卡节点(运行限 4 卡)、单卡显存 > 80GB、总 CPU 内存 > 900GB。
脚本参数解读
以 finetune/scripts/run_sft_Yi_6b.sh 为例,脚本基于 DeepSpeed 训练:
cd "$(dirname "${BASH_SOURCE[0]}")/../sft/" deepspeed main.py \ --data_path ../yi_example_dataset/ \ --model_name_or_path /base_model \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --max_seq_len 4096 \ --learning_rate 2e-6 \ --weight_decay 0. \ --num_train_epochs 4 \ --training_debug_steps 20 \ --gradient_accumulation_steps 1 \ --lr_scheduler_type cosine \ --num_warmup_steps 0 \ --seed 1234 \ --gradient_checkpointing \ --zero_stage 2 \ --deepspeed \ --offload \ --output_dir ./finetuned_model关键参数说明:
--data_path:训练/验证数据目录,需包含train.jsonl与eval.jsonl;--model_name_or_path:基座模型路径(6B/34B);--max_seq_len 4096:与 Yi 默认 4K 上下文对齐;--learning_rate 2e-6:SFT 常用低学习率;--training_debug_steps 20:每 20 步输出一次调试信息;对 6B 基座配合num_train_epochs=4约 20 分钟即可产出 Chat 模型;--zero_stage 2+--offload:DeepSpeed ZeRO-2 并启用 CPU offload;--gradient_checkpointing:梯度检查点,显著降低显存占用;--output_dir:微调产物输出目录。
注意:Yi-34B 初始化阶段耗时较长属正常现象,请耐心等待。
评估微调效果
cd finetune/scripts bash run_eval.sh该脚本(finetune/scripts/run_eval.sh)调用 finetune/sft/prompt_eval.py,同时加载基座模型(--model_name_or_path_base)与微调模型(--model_name_or_path_finetune),以中文提示词对比二者回答。
量化:GPTQ 与 AWQ
Yi 对两种主流 PTQ(训练后量化)方案均提供了一键脚本与评测脚本,量化后模型精度损失小,同时降低显存占用、可能带来推理加速。
GPTQ 量化
python quantization/gptq/quant_autogptq.py \ --model /base_model \ --output_dir /quantized_model \ --trust_remote_code量化完成后评估:
python quantization/gptq/eval_quantized_model.py \ --model /quantized_model \ --trust_remote_code从源码看(quantization/gptq/quant_autogptq.py),量化流程基于 transformers 集成的GPTQConfig:
--bits:量化位宽,默认 4;--group_size:量化分组大小,默认 128(对应 README 中--bits 4 --group_size 128的推荐组合);- 校准数据集使用
wikitext2,disable_exllama=False表示启用 exllama 内核; - 加载模型时将
model_config.max_position_embeddings设置为 4096 以避免量化阶段 OOM(quantization/gptq/quant_autogptq.py); - 产物通过
save_pretrained(..., safe_serialization=True)保存为安全格式。
AWQ 量化
python quantization/awq/quant_autoawq.py \ --model /base_model \ --output_dir /quantized_model \ --trust_remote_code评估:
python quantization/awq/eval_quantized_model.py \ --model /quantized_model \ --trust_remote_codeAWQ 是一种高效的 INT3/4 低比特权重量化方法,同样支持--bits 4 --group_size 128等参数(对应 quantization/awq/quant_autoawq.py)。
量化后性能差异主要取决于量化方法与具体使用场景:从 Benchmark 看可能仅有几个百分点的轻微下降;但在逻辑推理等主观场景下,哪怕 1% 的波动也可能影响输出准确性。
部署软硬件要求
软件要求
- 4-bit 量化模型:需要安装 AutoAWQ 与 CUDA;
- 8-bit 量化模型:需要安装 AutoGPTQ 与 CUDA。
硬件要求:Chat 模型
| 模型 | 最小显存 | 推荐 GPU 示例 |
|---|---|---|
| Yi-6B-Chat | 15 GB | 1×RTX 3090/4090/A10/A30(24 GB) |
| Yi-6B-Chat-4bits | 4 GB | 1×RTX 3060(12 GB)/ RTX 4060(8 GB) |
| Yi-6B-Chat-8bits | 8 GB | 1×RTX 3070/4060(8 GB) |
| Yi-34B-Chat | 72 GB | 4×RTX 4090(24 GB)/ 1×A800(80 GB) |
| Yi-34B-Chat-4bits | 20 GB | 1×RTX 3090/4090/A10/A30(24 GB)/ A100(40 GB) |
| Yi-34B-Chat-8bits | 38 GB | 2×RTX 3090/4090(24 GB)/ 1×A800(40 GB) |
不同 batch 下的最小显存明细:
| 模型 | batch=1 | batch=4 | batch=16 | batch=32 |
|---|---|---|---|---|
| Yi-6B-Chat | 12 GB | 13 GB | 15 GB | 18 GB |
| Yi-6B-Chat-4bits | 4 GB | 5 GB | 7 GB | 10 GB |
| Yi-6B-Chat-8bits | 7 GB | 8 GB | 10 GB | 14 GB |
| Yi-34B-Chat | 65 GB | 68 GB | 76 GB | > 80 GB |
| Yi-34B-Chat-4bits | 19 GB | 20 GB | 30 GB | 40 GB |
| Yi-34B-Chat-8bits | 35 GB | 37 GB | 46 GB | 58 GB |
硬件要求:Base 模型
| 模型 | 最小显存 | 推荐 GPU 示例 |
|---|---|---|
| Yi-6B | 15 GB | 1×RTX 3090/4090/A10/A30(24 GB) |
| Yi-6B-200K | 50 GB | 1×A800(80 GB) |
| Yi-9B | 20 GB | 1×RTX 4090(24 GB) |
| Yi-34B | 72 GB | 4×RTX 4090(24 GB)/ 1×A800(80 GB) |
| Yi-34B-200K | 200 GB | 4×A800(80 GB) |
常见问题(FAQ)
微调选 Base 还是 Chat?取决于数据量与任务需求:数据量大(如超过 1 万条样本)优先 Base 模型;数据量有限时 Chat 模型更合适;通常建议两个都微调并对比效果后择优。
Yi-34B 与 Yi-34B-Chat 全量微调有何区别?Chat 模型采用 SFT 方式训练,回答更接近人类对话风格;Base 模型微调更通用、性能天花板更高。数据质量有保障可优先 Base,追求对话风格或对数据质量存疑则优先 Chat。
量化模型与原版性能差距多大?取决于量化方法与场景,AWQ 官方模型在 Benchmark 上通常仅损失几个百分点;但在逻辑推理等场景,1% 的波动也可能影响结果。
哪里找微调问答数据集?可参考 Hugging Face 上的 m-a-p/COIG-CQIA 等公开数据集,以及 LLaMA-Factory 等微调框架内置的数据集。
Yi-34B FP16 微调显存需求?全参数微调约需 8×80GB GPU;LoRA 等低成本方案可显著降低需求;优先考虑 BF16 而非 FP16 以优化性能。
生态、基准与学习资源
上游兼容性
Yi 模型以 Llama 模型格式保存,可直接用LlamaForCausalLM与LlamaTokenizer加载(见 README.md 的 Upstream 小节),因此可复用 Llama 生态的既有工具链,例如:
from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("01-ai/Yi-34b", use_fast=False) model = AutoModelForCausalLM.from_pretrained("01-ai/Yi-34b", device_map="auto")基准表现
- Chat 模型:Yi-34B-Chat 在 MMLU、CMMLU、BBH、GSM8k 等基准上表现出色(评估图见 assets/img/benchmark_chat.png)。评估方法:除 TruthfulQA 外均同时采用 zero-shot 与 few-shot,Chat 模型更多采用 zero-shot,并对生成文本进行答案抽取(评估方法说明见 README.md 的 Benchmarks 小节)。
- Base 模型:Yi-34B 与 Yi-34B-200K 在 MMLU、CMMLU、常识推理、阅读理解等维度表现突出(评估图见 assets/img/benchmark_base.png)。评估遵循 Llama2 的方法论:常识推理使用 PIQA、SIQA、HellaSwag、WinoGrande、ARC、OBQA、CSQA;阅读理解使用 SQuAD、QuAC、BoolQ;数学与代码引入 GSM8K(8-shot@1)、MATH(4-shot@1)、HumanEval(0-shot@1)、MBPP(3-shot@1),且统一采用 greedy decoding 与一致的提示词/后处理策略。
- Yi-9B:在同尺寸开源模型中综合表现突出,尤其擅长代码、数学、常识推理与阅读理解(各维度对比图见 assets/img/Yi-9B_benchmark_details.png、assets/img/Yi-9B_benchmark_overall.png、assets/img/Yi-9B_benchmark_code.png、assets/img/Yi-9B_benchmark_math.png、assets/img/Yi-9B_benchmark_text.png)。
学习资源
- 中英文双语教程与可运行示例位于仓库 Cookbook 目录(中文见 Cookbook/cn,英文见 Cookbook/en),覆盖 RAG、Function Calling、本地部署(llama.cpp / LM Studio / Ollama / MLX)、量化、推理框架(Transformers / vLLM / lmdeploy / Swift)等主题;
- 微调示例与数据集模板见 finetune/yi_example_dataset;
- 视觉语言模型 Yi-VL 的代码位于 VL 目录,内含命令行推理、OpenAI 兼容 API 与 Web Demo。
使用许可
Yi 系列模型的代码与权重以 Apache 2.0 协议分发(LICENSE),个人、学术与商业使用均免费。若基于该模型创建衍生作品,建议在衍生作品中加入如下署名声明:
This work is a derivative of [The Yi Series Model You Base On] by 01.AI, used under the Apache 2.0 License.
需要说明的是:虽然训练过程中使用了数据合规性检查算法,但由于数据的复杂性与语言模型使用场景的多样性,模型仍可能在个别场景下产生不正确或不合理的输出,使用时请注意规避相关风险(完整免责声明见 README.md 的 Disclaimer 小节)。
【免费下载链接】YiA series of large language models trained from scratch by developers @01-ai项目地址: https://gitcode.com/GitHub_Trending/yi/Yi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考