
把DeepSeek-R1这类大模型跑在寒武纪MLU370上这个念头我琢磨了挺久。原因其实就是两件事一是手头确实有MLU370的资源二是翻遍各种教程讲N卡跑大模型的铺天盖地讲国产AI芯片实战的却都是零碎片段。所以我干脆自己动手在一台双卡MLU370-S4的服务器上把DeepSeek-R1的蒸馏版模型完整跑通了。从硬件选型、驱动安装、模型量化到推理实测和成本核算全过程都在今天这篇里。核心思路就一句话用24GB显存的国产推理卡把14B级别的DeepSeek-R1蒸馏模型跑起来速度能用、成本可控、数据不出内网。这篇文章适合三类人正在评估国产AI芯片落地的开发者、想低成本搭私有化大模型服务的个人用户以及被主流显卡价格劝退但又想认真玩大模型的人。我会把底层逻辑和实际操作混在一起讲看完你能直接照着复现而不是只收获一堆宣传话术。1. 为什么是MLU370 DeepSeek-R1这套组合解决了什么问题1.1 选型心路从N卡到国产卡的转折先说结论DeepSeek-R1原版模型有671B参数别说一张卡单机多卡都要好几张顶级加速卡才跑得动。但R1官方放出了一批蒸馏小模型从1.5B到70B不等这些模型保留了R1的思维链推理风格压缩到14B、7B之后单张卡完全有戏。我选的就是DeepSeek-R1-Distill-Qwen-14B这个档位。为什么选MLU370而不是继续用N卡直接原因是成本。24GB显存的RTX 3090二手价格长期在7000到10000元之间4090更是两万起步。MLU370-S4的二手行情大概6000到9000元同样是24GB显存功耗却只有75W不到3090的一半。对纯推理场景来说MLU370的算力虽然打不过4090但把一个14B模型喂饱是绰绰有余的。还有一个隐性原因国产AI芯片这几年在软件栈上进步很大。寒武纪的Neuware工具链已经支持了PyTorch、TensorFlow等主流框架llama.cpp这类社区项目也有了MLU后端。这意味着我可以用几乎和N卡一样的流程去部署大模型而不是被迫去啃一个完全不同的推理框架。1.2 部署路线的AB方案llama.cpp MLU后端为什么是首选跑大模型推理主流路线就那么几条vLLM、transformers、llama.cpp、Ollama。在MLU370上情况稍微特殊一点。vLLM虽然在高并发场景下性能极好但官方主线对寒武纪的支持并不完善需要等特定厂商适配版本配置成本高。transformers配合torch_mlu能跑但显存占用大、推理速度慢适合做实验不适合做服务。真正让我觉得“稳”的是llama.cpp的MLU后端。llama.cpp本来就是为消费级显卡和边缘设备设计的追求极致的资源利用效率。它把模型量化为GGUF格式后可以灵活选择量化精度把14B模型压到10GB以内完美塞进24GB显存。加上代码库干净、依赖少在MLU370上编译和部署的路径非常清晰。Ollama也考虑过但Ollama的MLU支持属于实验阶段版本敏感出问题排查起来很麻烦。所以最终方案定为llama.cpp源码编译 MLU后端 GGUF量化模型。1.3 先说边界这套方案不适合什么场景把丑话说在前面。一套方案的适用边界比它能做什么更重要。首先MLU370跑14B模型单请求生成速度大概在10到15 token/s这个速度对对话机器人、知识库问答完全够用但如果你要的是高并发生产环境每秒几十个请求那你要考虑的是多卡负载均衡或者换更强的芯片不是这张卡。其次DeepSeek-R1蒸馏版不等于原版R1复杂数学推理能力有肉眼可见的差距这个后面实测会展示。最后寒武纪生态的社区资料确实比N卡少遇到问题大概率要自己啃英文文档和源码心态上得做好准备。2. 部署前的准备硬件、驱动与基础环境2.1 关于MLU370你应该知道的几件事寒武纪MLU370系列有好几个型号我在用的是MLU370-S4。这张卡是半高半长单槽设计24GB显存额定功耗75WPCIe 4.0 x16接口不需要外接供电。单看这些参数它特别适合放进塔式工作站或者低功耗服务器里。购买时要特别注意两点。第一确认是S4而不是其它变体不同型号的算力和显存配置不同。第二如果打算长期跑推理建议直接买双卡配置。单张MLU370-S4跑14B模型在显存上没问题但并发能力很弱一张卡同一时刻只能处理一个请求双卡可以分摊压力。我的主机配置很朴素一颗中端CPU、64GB内存、一张普通主板、一块600W电源。两卡满载时整机功耗也就200W左右散热压力不大但机箱风道还是要保证尤其夏季长时间满载GPU温度最好控制在80度以下。2.2 驱动与Neuware软件栈安装实录这一步是很多人第一次接触国产AI卡被劝退的地方。寒武纪的软件栈叫Neuware包含驱动、运行时、编译工具等一堆组件。版本匹配极其重要驱动版本和运行时版本对不上后面llama.cpp编译出来也跑不起来。我的安装流程大概是这样的安装操作系统。推荐Ubuntu 20.04或22.04 LTS不要追求太新的内核版本部分新版内核不在支持列表内会导致驱动模块加载失败。安装基础依赖build-essential、linux-headers-$(uname -r)还有dkms寒武纪驱动依赖DKMS自动编译内核模块。下载并安装驱动包执行后需要重启。重启后运行cnmon命令如果能列出卡信息说明驱动已经正常加载。安装Neuware运行时和工具包包括CNToolkit、CNRuntime这些核心组件安装完把路径加到环境变量里。这里有个非常关键的细节LD_LIBRARY_PATH。llama.cpp在运行时需要找到寒武纪的动态库如果没有把这个路径配置好程序会报找不到设备的错但日志看起来又像是驱动问题很容易误判。2.3 环境自检清单在开始编译llama.cpp之前我建议先做一轮自检避免后面问题堆在一起不知道从哪查起cnmon输出是否正常显示卡型号、显存总量、当前温度ls /usr/local/neuware/lib64能看到libcnruntime.so等库文件内核模块modprobe cn具体模块名以驱动文档为准是否能成功加载确认编译用户对/usr/local/neuware目录有读权限。这些检查全部通过再进入下一步。别嫌麻烦这一步省下来的时间会在后面以十倍还给你。3. 模型获取、转换与量化实操3.1 选哪个R1模型14B蒸馏版是最佳平衡点DeepSeek-R1的蒸馏模型有好几个尺寸1.5B、7B、8B、14B、32B、70B。在MLU370-S4上1.5B和7B跑起来飞快但能力有限32B和70B显存压力大且速度下降明显14B正好是“质量”和“速度”的交叉点。我最终选了DeepSeek-R1-Distill-Qwen-14B。Qwen底座的中文能力很强蒸馏出来的模型在中文场景下更自然。如果你主要跑英文场景可以试试Distill-Llama-8B速度还会更快一些。要提醒的是这个模型虽然是R1的蒸馏版但输出里仍然保留了“思考过程”。也就是说它回答问题时会把推理链路写出来然后再给最终答案。这种风格既让人惊喜也会让生成时间变长后面测速时会有直观感受。3.2 下载模型从魔搭拉权重到本地国内网络环境下载Hugging Face模型经常不稳定我走的是魔搭社区ModelScope速度快且不需要额外工具。DeepSeek官方和魔搭上有完整权重搜DeepSeek-R1-Distill-Qwen-14B就能找到。建议直接下载HuggingFace格式的完整权重不要只下GGUF。因为后续我要自己用llama.cpp的转换脚本转成GGUF这样可以自己控制量化参数。完整权重目录里主要包含config.json模型结构配置model.safetensors权重文件有好几个分片tokenizer.json、tokenizer_config.json分词器配置generation_config.json生成参数配置下载完成后用du -sh检查一下目录大小14B模型权重大概在28GB左右确保磁盘空间充足。3.3 GGUF转换与量化把模型压到显存里这一步的核心目的是把PyTorch格式的模型转成llama.cpp能直接加载的GGUF格式同时做量化压缩。我用的是llama.cpp仓库自带的转换脚本。先克隆仓库然后在项目根目录执行转换命令python convert_hf_to_gguf.py /path/to/DeepSeek-R1-Distill-Qwen-14B \ --outfile deepseek-r1-14b-f16.gguf --outtype f16这一步会把整个模型转成fp16精度的GGUF文件体积大约28GB。转换过程需要几分钟耐心等。然后对这个fp16文件做量化生成体积更小、速度更快的版本./llama-quantize deepseek-r1-14b-f16.gguf deepseek-r1-14b-Q4_K_M.gguf Q4_K_MQ4_K_M是目前质量和体积权衡得最好的量化方案之一14B模型量化后大约8.5GB24GB显存可以轻松容纳还给KV Cache留出了足够空间。如果对精度不满意可以再试试Q6_K体积大约11GB速度稍微降一点但更接近原版效果。3.4 上机前最后的参数决策模型准备好之后还有三个参数要提前定好免得启动时反复试错。第一上下文长度。14B模型配合24GB显存-c 4096是比较稳的选择能覆盖绝大多数对话和问答场景。拉到8192也能跑但显存占用会明显上升并发能力下降。第二GPU层数。llama.cpp的--n-gpu-layers参数决定多少层算子在加速卡上执行建议直接设成99也就是能offload到MLU的层全部offload否则一部分层在CPU上跑速度会慢得让人怀疑人生。第三线程数-t。不要贪心把CPU核全给llama.cpp留一部分给系统调度否则整机可能卡顿。我这边16核CPU用-t 8最舒服。4. llama.cpp源码编译与MLU后端对接4.1 编译环境准备编译llama.cpp需要的基本工具链cmake、gcc、g、make。Ubuntu上一条命令装齐sudo apt install build-essential cmake另外需要确认寒武纪的CNRuntime已安装并且环境变量指向正确。llama.cpp的CMake在检测MLU后端时会去固定的路径找寒武纪的库和头文件。如果找不到编译时会直接禁用MLU支持而且不会给你明显警告非常坑。我建议在编译前手动检查一下ls /usr/local/neuware/include ls /usr/local/neuware/lib64只要头文件和动态库都在后面编译才有戏。4.2 编译llama.cpp开启MLU后端克隆llama.cpp仓库后进入根目录创建一个build目录在cmake阶段指定开启MLU后端。不同版本的llama.cppCMake选项名略有差异有的是GGML_MLUON有的是LLAMA_MLUON。保险做法是先列出所有选项确认一下git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp mkdir build cd build cmake -LAH .. | grep -i mlu如果看到GGML_MLU或者LLAMA_MLU相关选项就用对应的名字开启cmake .. -DGGML_MLUON make -j$(nproc)编译完成后在build/bin目录下会生成llama-cli、llama-server、llama-quantize等工具。如果编译过程中报找不到cnrt.h之类的错误就是寒武纪头文件路径没被找到需要手动指定-DCNRT_ROOT/usr/local/neuware或者通过环境变量NEUWARE_HOME设置。4.3 首次运行从启动日志确认MLU真的在干活编译完成后先不要急着跑业务数据用简单方式验证MLU后端是否真的生效./build/bin/llama-cli -m deepseek-r1-14b-Q4_K_M.gguf \ -p 你好 -n 32 -t 8 --n-gpu-layers 99启动时留意日志。如果MLU后端正常工作日志里会出现类似device: MLU、load_tensor: offloaded N/N layers to MLU的信息。如果日志里全是CPU、完全没有MLU字样说明编译时MLU后端没有真正开启或者运行时没找到设备赶紧回到上一步排查。另外一个快速验证工具是llama-bench它可以自动跑性能测试并输出token/s比手动对话高效很多./build/bin/llama-bench -m deepseek-r1-14b-Q4_K_M.gguf --n-gpu-layers 99 -t 85. 实测推理效果速度、质量与资源占用5.1 实测环境与测试方法先交代清楚测试环境方便你对照自己的设备双路MLU370-S4实际跑单卡推理、Ubuntu 22.04、llama.cpp最新主线代码、DeepSeek-R1-Distill-Qwen-14B的Q4_K_M量化版、上下文长度4096、线程数8、GPU层数99。测试方法分两部分一是用一组固定问题看输出质量二是用llama-bench统计生成速度和显存占用。5.2 真实问答表现14B模型的推理质量我之前问了一个逻辑问题“有一个农场有鸡和兔子共35个头、94只脚问鸡和兔子各多少只”模型的思考过程大致是“假设全是鸡则有70只脚还差24只脚每换一只兔子多2只脚所以兔子是12只鸡是23只。”最后把步骤和答案都写清楚了和R1原版的风格基本一致。另一个偏开放性的问题“用一句话向第一次接触大模型的人解释什么是思维链。”它的回答很自然不是那种生硬的术语堆砌。整体来看14B蒸馏版在常识问答、逻辑推理、中文表达上都在可用线以上但遇到复杂的多步骤数学推导时偶尔会啰嗦或者绕远路这是它和原版671B模型之间的真实差距。5.3 速度与显存数据汇总下面这组数据是我多轮实测下来的平均值不同环境会有几个token/s的浮动但趋势是稳定的模型量化生成速度首token延迟显存占用Qwen-7BQ4_K_M24~28 token/s0.8s左右约6GBQwen-14BQ4_K_M10~13 token/s1.5s左右约10GBQwen-14BQ6_K7~9 token/s2s左右约13GB需要特别说明的是这些速度包含了R1模型特有的“思考过程”生成。如果你问一个简单问题它可能要先思考一两百个token再给结论体感响应很慢但这是模型风格决定的不是硬件问题。如果只算生成阶段速度是稳定的。5.4 一组容易忽略的性能调优参数实测过程中我踩了几个性能坑分享几个立竿见影的参数-c 4096刚刚好。上下文从4096拉到8192显存占用多出好几GB速度下降明显日常用完全没必要。--mlu-device相关参数要看版本。单卡环境不用管多卡环境要指清楚跑哪张卡否则默认行为可能让你摸不着头脑。并发数不要乱调。llama-server的-np参数决定并行序列数量MLU370-S4单卡跑14B模型时-np 1最稳调成2会明显拖慢单请求速度因为算力被分摊了。采样参数里--temp 0.6、--top-p 0.9对R1模型很关键。温度太高会让思考过程飘忽太低又容易复读。这批蒸馏模型对采样参数比较敏感值得反复调几次。6. 成本账本把钱花在刀刃上6.1 一次性硬件投入成本分析是这篇的重头戏。我按自己实际的花费列一张表项目型号/说明参考价格加速卡二手MLU370-S4 24GB6000~9000元/张整机二手工作站或自组服务器2000~4000元内存64GB DDR4约800元硬盘1TB NVMe SSD约500元电源、散热已有或另购0~500元我做的是双卡方案加速卡是大头。如果只跑14B模型单卡起步完全够用等业务量上来再补第二张卡也不迟。整套下来单卡方案预算可以控制在1.2万元左右双卡方案在2万元左右。6.2 运营成本与电费细算MLU370-S4单卡功耗75W两张卡加整机其它部件满载整机功耗大约200W到220W日常平均功耗150W左右。按一天24小时、一度电0.6元算月电费大约65到95元。按一天只跑8小时算月电费只有20到30元。这和一张300W以上的显卡相比一年能省出一笔可观的电费。机器维护成本基本为零除了偶尔升级llama.cpp版本硬件的故障率很低。折旧按三年算一张7000元的卡每月折损约200元加上电费和网费月成本可以压到250元以内这个数字对比云服务有很强的吸引力。6.3 和云GPU、N卡、官方在线服务的成本对比这组对比是我最终决定自建的原因。以24GB显存级算力为基准方案配置月成本估算备注云GPU按需租用A10 24GB1000~3000元按小时计费长期跑很贵本地RTX 309024GB电费折旧500元以上二手卡价格波动大本地MLU370-S424GB含折旧250元左右单卡/双卡方案都可扩展官方在线接口按token计费取决于用量数据出外网私有化受限云GPU的优势是灵活弹性但只要你每天跑8小时以上一个月下来的租金就够买卡了。RTX 3090性能确实更强但功耗高导致电费翻倍而且二手价格在AI热潮下波动剧烈。官方在线接口响应质量最好但每次都把内部数据送到外部服务等于放弃了私有化部署的底线。对数据敏感、用量稳定的场景MLU370的长期成本优势非常明显。7. 常见问题与排查技巧7.1 驱动安装失败最常见也最容易被卡住的一关我在驱动上花的时间比其他所有步骤加起来都多主要原因是内核版本匹配。寒武纪驱动对内核版本有限制太新的内核会编译失败。如果你装的是Ubuntu 22.04且内核自动更新到了最新版建议回退到官方支持列表内的内核版本或者干脆在安装系统时锁定内核版本不要轻易执行apt upgrade。另外驱动安装后必须重启然后立刻用cnmon验证。如果cnmon提示找不到卡先检查lspci | grep -i cambricon是否能看到PCIe设备。看不到就是物理识别问题看得到但驱动不加载基本可以锁定是内核模块或版本冲突。7.2 编译或运行时报找不到设备这问题我在配置双卡环境时遇到过。编译阶段报找不到寒武纪头文件先确认NEUWARE_HOME和LD_LIBRARY_PATH是否正确设置。不要把这两个环境变量写到某个临时shell里建议写进/etc/profile或者用户.bashrc避免每次登录都要重新导出。运行时如果提示没有设备多半是权限问题。看看当前用户有没有video组权限或者直接临时用sudo跑一次验证。如果sudo能跑通那就在用户组里加权限别图省事一直用sudollama-server做服务时权限管理会很麻烦。7.3 输出质量异常不一定是模型的锅如果你发现模型回答总是重复、跑偏或者生成半截话先不要急着怪硬件和模型。很大概率是你的采样参数没调好。R1系蒸馏模型对temperature非常敏感太高了就胡言乱语太低了就复读机。我的经验值是0.6到0.7之间。还有一个细节如果用了自定义system prompt尽量精简。这个模型对复杂指令的理解能力有限绕来绕去的提示词反而会把输出带偏。我在测试时把system prompt改成一句话“你是一个乐于助人的助手”效果比长版本好很多。7.4 多卡并行与高并发部署经验双卡不等于自动双倍性能。llama.cpp默认情况下一个进程只会把模型加载到一张MLU上两个请求进来如果都跑在同一张卡另一张卡就在旁边看热闹。我的做法是分别启动两个llama-server实例每个实例通过参数显式绑定一张卡前端再挂个简单的负载均衡把请求轮流分到两个端口上。这套方案实现简单但已经能稳定支撑两个并发请求。7.5 快速排查表现象优先检查项cnmon无卡信息PCIe识别、内核模块、驱动版本编译时MLU后端静默关闭寒武纪头文件路径、CMake选项名启动日志全是CPULD_LIBRARY_PATH、后端编译是否开启推理速度极慢--n-gpu-layers是否设满显存OOM降低量化级别、缩短上下文输出重复/乱飘temperature、top-p参数回头再看这套方案我的个人体会是国产AI芯片做推理部署已经过了“能不能用”的阶段现在是“怎么用好”的问题。MLU370的硬件底子不差软件栈也比前两年成熟了太多真正缺的恰恰是像N卡社区那样丰富的实战经验分享。如果你手头正好有这块卡强烈建议按这个流程试着跑一遍。我在跑通之后又叠加了HTTP服务接口和简单的Web前端下一步打算把知识库检索功能也接进来做成一个完整的私有化问答系统。国产卡做这件事路虽然比N卡崎岖一点但走通之后的踏实感是花钱租云服务给不了的。