LLaMA-Factory 部署与 DeepSeek-R1-Distill-Qwen 模型乱码问题解决全记录

发布时间:2026/9/21 21:54:26

LLaMA-Factory 部署与 DeepSeek-R1-Distill-Qwen 模型乱码问题解决全记录
LLaMA-Factory 部署与 DeepSeek-R1-Distill-Qwen 模型乱码问题解决全记录摘要本文记录了在远程 A100 服务器上部署 LLaMA-Factory并加载 DeepSeek-R1-Distill-Qwen 系列模型时遇到的输出乱码问题。通过强制指定 Qwen2Tokenizer最终完美解决。全过程包括环境配置、CUDA 版本协调、模型下载、问题排查与修复。0、一点小废话请注意AI环境版本迭代很快本文编辑和实验时间2026年7月2日您看到此文章时LLaMA-Factory框架、PyTorch、CUDA版本可能会有变动请以三者官网公布最新的适配版本为准进行配置。一、环境概览本地VSCode Remote-SSH 插件服务器Ubuntu 24.04.3 LTS (NVIDIA A100)目标框架LLaMA-Factory测试模型deepseek-ai/DeepSeek-R1-Distill-Qwen-7B及 1.5B 版本最终稳定模型Qwen/Qwen2.5-1.5B-Instruct验证正常二、LLaMA-Factory 安装步骤1. 克隆仓库gitclone--depth1https://github.com/hiyouga/LLaMA-Factory.gitcdLLaMA-Factory2. 准备 Conda 环境推荐若未安装 Miniconda# 进入你的家目录cd~# 下载最新 Miniconda 安装包Linux x86_64wgethttps://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh# 执行安装按提示操作空格翻页yes 接受协议回车确认安装位置bashMiniconda3-latest-Linux-x86_64.sh# 安装完成后关闭并重新打开终端或者执行source~/.bashrc⚠️ 若为 root 用户建议将 conda 缓存和 envs 目录挂载到数据盘如/root/autodl-tmp/conda避免占满系统盘。参考挂载指令mkdir-p/root/autodl-tmp/conda/pkgs conda config--addpkgs_dirs /root/autodl-tmp/conda/pkgsmkdir-p/root/autodl-tmp/conda/envs conda config--addenvs_dirs /root/autodl-tmp/conda/envs3. 创建虚拟环境conda create-nllama-factorypython3.13.5# 也可换为 3.11conda activate llama-factory4. 安装 LLaMA-Factory 及其依赖pipinstall-e.[torch,metrics]5. 检验安装llamafactory-cli version若无报错则基础安装完成。三、CUDA 与 PyTorch 版本协调重要安装后执行llamafactory-cli version可能出现警告CUDA version mismatch因为默认安装的 PyTorch 编译时使用的 CUDA 版本与系统驱动不一致。服务器 CUDA 版本12.9默认 PyTorch 编译版本13.0不兼容解决方案查看当前 PyTorch 信息python-cimport torch; print(PyTorch version:, torch.__version__); print(CUDA compiled version:, torch.version.cuda)卸载默认 PyTorchpip uninstall-ytorch torchvision torchaudio安装与 CUDA 12.9 兼容的 PyTorch推荐 CUDA 12.6 版本查询PyTorch官网了解到目前适配12大版本CUDA的对应稳定版本是CU126安装指令参考官网的版本pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126出现了三个报错主要是有两个包版本过高需要降级还有torchaudio漏装了下面进行修复若torchaudio未装补装pipinstalltorchaudio --index-url https://download.pytorch.org/whl/cu126降级冲突包如fsspec,pillowpipinstallfsspec2025.3.0pillow11.3.0✅ 也可直接新建 conda 环境先装Python和 PyTorch 全家桶再装 LLaMA-Factory避免依赖冲突然后再把出错的conda环境删掉conda create-nllama-factory-311python3.11-yconda activate llama-factory-311 pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126cd~/LLaMA-Factory pipinstall-e.[torch,metrics]最终验证python-cimport torch; print(torch.cuda.is_available()); print(torch.version.cuda)# 应输出 True 和 12.6别忘了确认llamafactory环境是否正常llamafactory-cli version如下图所示没有出现警告说明安装成功。四、下载 HuggingFace 模型记得先新建一条路径用来存储待会下载的模型可以参考下面的代码1. 设置下载目录与镜像可选如下指令只会在当前会话生效若需要长期生效可以写入配置文件。你的文件路径大概率和我的不同请将下面的路径配置为你自己准备下载模型的路径。exportHF_HOME/your/data/path/Hugging-Face# 请替换为你的实际路径exportHF_ENDPOINThttps://hf-mirror.com# 镜像加速# 下面两条指令用于验证上面的临时环境变量是否配置成功echo$HF_ENDPOINTecho$HF_HOME2. 安装huggingface_hub使用官方的下载器来下载pipinstall-Uhuggingface_hub3. 下载目标模型hf download deepseek-ai/DeepSeek-R1-Distill-Qwen-7B模型会被保存至$HF_HOME/hub/下的 snapshot 目录。上述指令中使用的模型名字可以通过Huggingface官网直接找到你想要的模型后复制完整的名字五、运行llama-factory验证模型是否可用1.启动webuillamafactory-cliwebui2.选择模型名称先选择模型名称为DeepSeek-R1-Distill-Qwen-7B3.替换模型路径找到下载的模型文件快照目录下对应的唯一哈希值命名的文件夹复制该路径4.设置模型路径并加载设置模型路径后在chat页面下选择加载模型等待加载完成5.尝试进行模型对话发现对话中参入了很多乱码六、问题模型输出乱码现象描述在 LLaMA-Factory WebUI 中加载DeepSeek-R1-Distill-Qwen-7B或 1.5B后对话输出出现大量不可读字符例如Hello! How can I assist you today? ðŁĺĬ或出现C\Git、大量G和Ġ等符号。初步尝试更换模型版本7B → 1.5B—— 无效更换 Python 版本3.13 → 3.11—— 无效重装 PyTorch 不同 CUDA 版本 —— 无效手动清理Ġ和Ċ占位符 —— 残留其他乱码如 EMJ根本原因AutoTokenizer默认加载了LlamaTokenizer而非该模型所需的Qwen2Tokenizer。原因是模型目录下的tokenizer_config.json中tokenizer_class缺失或错误导致 Transformers 库回退到错误的分词器造成 token ID 与词表不匹配。七、最终解决方案强制指定 Qwen2Tokenizer1. 编写 Python 脚本测试importtorchfromtransformersimportAutoModelForCausalLM,AutoTokenizer,Qwen2Tokenizer MODEL_PATH/home/xiezhongjun/hugging-face/hub/models--deepseek-ai--DeepSeek-R1-Distill-Qwen-7B/snapshots/916b56a44061fd5cd7d6a8fb632557ed4f724f60print(正在加载模型...)modelAutoModelForCausalLM.from_pretrained(MODEL_PATH,dtypetorch.bfloat16,device_mapauto)# 关键修复强制使用 Qwen2Tokenizer并添加 trust_remote_codeTruetokenizerQwen2Tokenizer.from_pretrained(MODEL_PATH,trust_remote_codeTrue,use_fastTrue# Qwen2 必须用 fast 版本)# 验证是否修复成功打印词表大小Qwen2-7B 应为 151643 左右print(f词表大小验证:{len(tokenizer)})# 如果输出是 32000 或 50000说明加载依然错误print(模型加载完成。输入 quit 退出。)whileTrue:user_inputinput(\n你: )ifuser_input.lower()quit:breakmessages[{role:user,content:user_input}]prompttokenizer.apply_chat_template(messages,tokenizeFalse,add_generation_promptTrue)inputstokenizer(prompt,return_tensorspt).to(model.device)withtorch.no_grad():outputsmodel.generate(**inputs,max_new_tokens512,temperature0.6,top_p0.95,do_sampleTrue,eos_token_idtokenizer.eos_token_id,pad_token_idtokenizer.pad_token_id,)# 获取新生成的 token ids去掉输入部分output_idsoutputs[0][inputs.input_ids.shape[1]:]# 使用标准解码responsetokenizer.decode(output_ids,skip_special_tokensTrue,clean_up_tokenization_spacesTrue# 这一句是关键让分词器自行处理空格)# 手动修复字节级占位符将 Ġ 替换为空格Ċ 替换为换行#response response.replace(Ġ, ).replace(Ċ, \n)# 移除思维链if/thinkinresponse:responseresponse.split(/think)[-1]# 可选压缩多余空白#response \n.join(line.strip() for line in response.splitlines() if line.strip())print(f模型:{response})运行该脚本输出正常无乱码。2. 在 LLaMA-Factory WebUI 中应用WebUI 无法直接修改代码需通过修正模型配置文件来让AutoTokenizer自动选中正确类。操作步骤进入模型 snapshot 目录cd/your/Hugging-Face/hub/models--deepseek-ai--DeepSeek-R1-Distill-Qwen-7B/snapshots/916b56a...查看tokenizer_config.json的tokenizer_class字段将其修改为Qwen2Tokenizer重启 LLaMA-Factory WebUI重新加载模型即可正常对话。llamafactory-cliwebui八、验证与对比模型分词器加载输出结果DeepSeek-R1-Distill-Qwen-7B/1.5B默认LlamaTokenizer错误乱码含 Ġ, Ċ, 特殊字符DeepSeek-R1-Distill-Qwen-7B/1.5B强制 Qwen2TokenizerQwen2Tokenizer正确正常中文/英文Qwen/Qwen2.5-1.5B-InstructAutoTokenizer 自动正确正常无需修改结论该模型本质是基于 Qwen 架构分词器必须使用Qwen2Tokenizer。九、经验总结分词器不匹配是导致解码乱码的常见原因尤其是基于 Qwen 的衍生模型。当AutoTokenizer加载错误时应检查tokenizer_config.json中的tokenizer_class字段。若 WebUI 无法手动指定分词器类可直接修正配置文件或使用脚本方式调用。安装 LLaMA-Factory 时注意 CUDA 与 PyTorch 版本兼容性推荐使用 conda 隔离环境。十、参考资料LLaMA-Factory GitHubHuggingFace 模型下载PyTorch 官网Bilibili堂吉诃德拉曼查的英豪 – – LoRA 算法论文解读 开发人员如何微调大模型并暴露可调用接口最终测试在修复后的环境下DeepSeek-R1-Distill-Qwen-7B/1.5B 以及Qwen/Qwen2.5-1.5B-Instruct均可正常进行中文对话输出流畅、无乱码。问题圆满解决。

相关新闻

AI微调是什么?不懂这个别说你懂AI

AI微调是什么?不懂这个别说你懂AI

2026/9/8 7:24:05

微调到底是什么 微调的英文是 Fine-tuning,字面意思就是「fine tune(精细调节)」。 大模型训练分两个阶段。 第一个阶段叫预训练。给AI喂几百GB的文本,让它学会语言规律、世界知识。这个阶段极贵,几千万到几个亿美金&a…

Eclipse Ditto 物模型搭建

Eclipse Ditto 物模型搭建

2026/9/10 1:23:05

需要知道Eclipse Ditto是什么 、怎么安装就点击下面的链接查阅。 Eclipse Ditto 、 Mosquitto MQTT 、 OpenModelica 开发工具-CSDN博客 Eclipse Ditto 开发环境 搭建-CSDN博客 Eclipse Ditto:开源物联网数字孪生平台技术深度解析 - 东峰叵,com - 博客园 一、主要…

Java工程师资格证?别被忽悠了!个人根本报不了名

Java工程师资格证?别被忽悠了!个人根本报不了名

2026/9/8 3:45:29

什么是 Ja 书, 需要啥条件, 各位学员, 大家好。到 2025 年, 就目前这种状况而言, 个人没办法报考 Ja 工程师证书, 得去询问了解报考 Ja 工程师证书的培训机构, 以及进行报考事宜, 之后由培训机构统一向上报送。然后去参加包括报名、学习、培训等一系列的整个流程。它是经过权威…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/21 18:38:46

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/21 18:41:09

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/21 18:36:40

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/21 18:37:26

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/21 18:40:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/21 18:36:17

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/9 16:28:52

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

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

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

2026/9/8 3:19:39

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

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

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

2026/9/8 4:00:23

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