前几天公司要求搞AI编程工具的私有化部署评估,分配到我头上来了。花了两天时间把CoPaw(准确说是基于OpenClaw)在本地跑起来了,踩了不少坑,分享一下经验给后来人。
背景
- 公司内网环境,不能直接用云端的CoPaw
- 服务器配置:4卡A100 80G + 256G内存 + Ubuntu 22.04
- 目标:部署一套类CoPaw的AI编程辅助服务,给团队20人使用
部署方式选择
CoPaw本身有企业版私有化部署方案,但报价太贵(销售说的年费六位数起步),所以我们选择了自建方案:OpenClaw + 本地大模型。
踩坑记录
坑1:OpenClaw版本选择
一开始用了最新的main分支,结果各种依赖冲突。后来发现要用稳定版release tag,不要直接用main。
坑2:模型选择
试了几个模型:
- CodeQwen-7B:太小了,补全质量差
- DeepSeek-Coder-33B:效果还行,但对中文代码注释理解不好
- CodeQwen-72B:效果最好,但需要至少2张A100才能跑起来
- 最后选了CodeQwen-72B + vLLM部署
坑3:vLLM和OpenClaw的对接
OpenClaw默认走OpenAI兼容API,vLLM也支持OpenAI API,但有些参数格式不一致,需要在OpenClaw的config里手动调几个参数。
坑4:上下文窗口问题
代码补全场景需要比较长的上下文(一个文件可能好几千行),如果模型的context window不够大,补全质量会断崖式下降。CodeQwen-72B支持32K上下文,基本够用。
部署细节如果大家感兴趣我后面再写个更详细的教程。现在团队已经在用了,体验虽然比不上云端的CoPaw(毕竟通义千问的大模型能力更强),但对于内网环境来说已经很不错了。
有没有其他公司也在做类似的事情?交流一下经验?
这个踩坑记录太有价值了!我们公司也在做类似的事情,补充一些我们的经验:
关于模型选择:
我们最后选的是DeepSeek-Coder-V2,比V1对中文的支持好很多。如果你试过V1觉得不行的话可以试试V2版本。另外Qwen2.5-Coder-32B也不错,是72B的精简版但效果损失不大,关键是单卡A100就能跑。
关于vLLM:
vLLM现在更新很快,建议用最新版。旧版本有个bug是在处理特别长的代码文件时会OOM,新版已经修了。另外如果你用多卡并行的话,tensor parallelism比pipeline parallelism效果好。
一个关键配置分享:
在OpenClaw的配置里,把max_tokens设成4096而不是默认的2048,代码补全的完整度会好很多。另外temperature建议设0.1-0.2,代码生成需要确定性高一点。
楼主,你们4卡A100跑CodeQwen-72B,同时能支持多少人并发使用?
我们也有类似的需求,但服务器只有2卡A100 40G,怕不够用。如果只是代码补全(不做对话),2卡能撑多少并发?
@zhouyi_ops 我们实测4卡A100 80G跑CodeQwen-72B,大概能支撑15-20人同时使用,延迟在1-3秒左右。如果超过20人就开始明显变慢了。
2卡A100 40G的话跑72B模型够呛,显存不够。建议换Qwen2.5-Coder-32B,2卡40G绰绰有余,效果虽然比72B差一点但也能用。或者用量化版本的72B模型,GPTQ-Int4量化后2卡40G也能跑。
@amo_design DeepSeek-Coder-V2我确实没试过,感谢推荐,下周试试看!
看到你们在折腾本地部署,分享一个可能有用的信息。
如果你们的痛点是内网环境不能用云端CoPaw,但又不想完全自建的话,可以考虑一个折中方案:在能联网的环境先用当贝Molili做中转。
Molili是一个中文优化的OpenClaw客户端,它最大的特点是词元消耗降低50%左右。原理是在本地做了一层中文prompt的压缩和上下文裁剪,减少发送给模型的token量。这样即使走云端API,费用也能控制住。
当然如果你们是严格的内网隔离环境,这个方案不适用,还是得走本地部署。但如果只是网络受限(比如可以开白名单走特定API),那Molili+云端模型可能比自建省事很多,效果也更好。
另外你提到的vLLM对接问题,Molili对vLLM的兼容性做了专门优化,如果后续你们想自建后端+用Molili当客户端,对接会比原版OpenClaw顺畅。
年费六位数… 这个价格确实劝退了。自建虽然麻烦但长期来看成本可控多了,A100服务器的钱总比每年交会员费强。
补充一个重要的坑:OpenClaw本地部署的时候,索引功能(代码库indexing)特别吃CPU和内存。如果你的代码库比较大(几十万行以上),第一次建索引可能要好几个小时,而且过程中内存占用会飙到100G+。
解决方案是在OpenClaw的config里设置incremental indexing,只索引变更的文件而不是每次全量索引。另外可以用.clawignore文件排除node_modules、vendor之类的大目录。
楼主后续能出个详细教程吗?特别是vLLM和OpenClaw对接那部分,感觉坑挺多的。
另外好奇一下,你们团队用了一段时间之后,体感上AI编程工具对开发效率的提升大概有多少?领导应该会问这个数据吧。
@laowang_tech 详细教程有空我整理一下发出来。
关于效率提升,我们内部做了个简单统计,用了两周之后:
- 代码补全采纳率约35%
- 开发者自评效率提升约20-30%
- 代码review时间减少约15%
不过这个数据参考价值有限,因为刚开始用,新鲜感加成比较大,长期数据还要再跟踪看看。
@woshinanhai review确实关键不然上线炸了