🎯 本文目标:在星睿O6上部署CodeGeeX2实现智能代码生成,完成整个智谱AI全栈大模型生态系统的构建,让星睿O6成为真正的AI开发工作站。
经过查阅资料和深入学习,在星睿O6开发板上成功部署了智谱AI系列大模型,包括文本生成大模型、视觉大模型,以及代码生成大模型。
在学习研究的过程中,我做了详细的笔记,经过整理,成为本系列文章,分享给大家。
通过本系列文章,您将了解到:
第一阶段:开发环境准备
- 第一篇:星睿O6与智谱AI大模型概览
- 第二篇:在PC上搭建llama.cpp推理环境
- 第三篇:在PC上搭建chatglm.cpp推理环境
第二阶段:环境迁移与部署
- 第四篇:将llama.cpp环境部署至星睿O6
- 第五篇:将chatglm.cpp环境部署至星睿O6
第三阶段:大模型实战运行
- 第六篇:在星睿O6上运行智谱AI文本大模型(基于llama.cpp)
- 第七篇:在星睿O6上运行智谱AI文本大模型(基于chatglm.cpp)
- 第八篇:在星睿O6上运行智谱AI视觉大模型
- 第九篇:为llama.cpp与chatglm.cpp部署Web服务与OpenAI兼容API
第四阶段:专项能力扩展
- 第十篇:在星睿O6上部署CodeGeeX2实现智能代码生成
本文是第十篇:在星睿O6上部署CodeGeeX2实现智能代码生成
🔧 CodeGeeX2技术概述
CodeGeeX2是智谱AI发布的代码生成模型,作为多语言代码生成模型CodeGeeX的第二代模型,使用ChatGLM2架构注入代码实现,具有多种特性,如更强大的代码能力、更优秀的模型特性、更全面的AI编程助手和更开放的协议等。
CodeGeeX2模型特点:
- 多语言支持:支持Python、Java、JavaScript、C++、Go、Rust等绝大多数编程语言
- 代码理解:不仅能生成代码,还能解释和优化现有代码
- 上下文感知:理解代码上下文,生成更符合逻辑的代码
- 对话式交互:支持代码相关的问答和讨论
- 高效推理:专门优化了代码生成的推理速度
技术优势:
- 基于GLM架构,专门针对代码任务优化
- 训练数据包含大量高质量代码库
- 支持代码补全、错误修复、重构建议等
- 在多项代码生成基准测试中表现优异
🔨 搭建CodeGeeX2运行环境
📥 下载CodeGeeX2源码
cd ~/Projects
# 加速方式1:【不考虑】
# 如果不能正常访问github.com,需要设置代理
# 设置代理
# git config --global http.proxy http://192.168.1.15:7890
# git config --global https.proxy http://192.168.1.15:7890
# 取消代理
# git config --global --unset http.proxy
# git config --global --unset https.proxy
git clone https://github.com/zai-org/CodeGeeX2.git
# 加速方式2:【优先考虑】
# 不设置访问代理,使用加速服务 https://ghfast.top/
git clone https://ghfast.top/https://github.com/zai-org/CodeGeeX2.git
# 设置文件忽略
cd CodeGeeX2
git config core.filemode false源码特点:
- 集成了chatglm.cpp推理引擎
- 包含完整的Web UI和API服务
- 提供了多种部署方式
- 支持CPU和GPU推理
🛠️ 建立python运行环境
# 创建专属虚拟运行环境
python -m venv --system-site-packages .venv
source .venv/bin/activate
# 安装大模型工具包
pip install huggingface_hub
pip install modelscope
# 安装依赖包
pip install -r ./requirements.txt
# 安装chatglm.cpp的py扩展
cd ~/Projects/chatglm.cpp/
CMAKE_ARGS="-DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv9-a+i8mm+dotprod -DGGML_CPU_KLEIDIAI=ON" pip install -e .
cd ~/Projects/CodeGeeX2依赖环境说明:
- 需要先安装chatglm.cpp的Python扩展
- CodeGeeX2依赖torch等深度学习框架
- 建议使用虚拟环境隔离依赖
📥 下载模型文件
# int4必须要用gpu运行,无法在Orion-O6使用
model_group=ZhipuAI
model_name="CodeGeeX2-6B-int4"
modelscope download --model $model_group/$model_name --local_dir ./$model_group/$model_name/
# fp16可以用cpu运行,可以在Orion-O6使用
model_group=ZhipuAI
model_name="CodeGeeX2-6B"
modelscope download --model $model_group/$model_name --local_dir ./$model_group/$model_name/下载完成后,查看具体的模型文件:
# 检查模型文件
ls -la ZhipuAI/CodeGeeX2-6B/模型选择说明:
- CodeGeeX2-6B-int4:4位量化模型,需要GPU支持,星睿O6无法使用
- CodeGeeX2-6B:FP16精度模型,可使用CPU推理,在星睿O6上运行
- FP16模型约12GB,下载时间取决于网络速度
🌐 运行CodeGeeX2网页服务
CodeGeeX2源码中,提供了一个Web服务,用于展示其功能。
🚀 运行服务
python ./demo/run_demo.py --cpu --quantize 4 --chatglm-cpp --model-path ZhipuAI/CodeGeeX2-6B --listen 192.168.1.160 --port 8048启动参数说明:
--cpu:使用CPU推理--quantize 4:4位量化,平衡性能和精度--chatglm-cpp:使用chatglm.cpp后端--model-path:模型路径--listen:监听地址--port:服务端口
🛠️ 常见错误
tiktoken错误
# 如果出现tiktoken错误,则安装tiktoken pip install tiktokenprotobuf错误
# 如果出现protobuf错误: # ImportError: requires the protobuf library but it was not found in your environment. pip install protobufvocab_size错误
# 如果出现vocab_size错误 # AttributeError: ChatGLMTokenizer has no attribute vocab_size # 则卸载 transformers-4.57.3 pip uninstall transformers pip install transformers==4.33.2cpm_kernels错误
# 如果出现cpm_kernels错误 # Failed to load cpm_kernels:No module named 'cpm_kernels' # 安装cpm_kernels pip install cpm_kernels内存不足错误
- 错误表现:
# 内存不足 # 调用途中退出: # Loading checkpoint shards: 86% # Processing model states: 0% # 查看dmesg有Out of memory信息: sudo demsg [209127.953885] [pid:99340,cpu1,python]Out of memory: Killed process 99340 (python) total-vm:25964300kB, anon-rss:5232232kB, file-rss:0kB, shmem-rss:0kB, UID:1002 pgtables:25456kB oom_score_adj:0解决办法:
# 增大SWAP空间 lsblk | grep -i swap sudo swapoff /dev/zram0 sudo zramctl --reset /dev/zram0 sudo zramctl --find --size 16G --algorithm zstd sudo mkswap /dev/zram0 sudo swapon --priority 100 /dev/zram0 lsblk | grep -i swap
CUDA错误:
# CUDA错误 # AssertionError: Torch not compiled with CUDA enabled # 检查是否执行过 chatglm.cpp 扩展安装tabulate错误
# tabulate错误 # ModuleNotFoundError: No module named 'tabulate' pip install tabulate
错误处理策略:
- 依赖版本冲突:使用指定的transformers版本
- 内存不足:增加swap空间
- CUDA问题:确认使用CPU模式
- 缺少模块:逐个安装缺失的依赖包
✅ 最终运行
# 请注意将IP和端口,修改为实际使用的
python ./demo/run_demo.py --cpu --quantize 4 --chatglm-cpp --model-path ZhipuAI/CodeGeeX2-6B --listen 192.168.1.160 --port 8048运行成功后,会提示网页服务的地址:
🌐 访问网页界面
在浏览器打开上一步显示的网页服务的地址,就可以打开在线代码生成界面:
选择语言,给出需求,点击Generate,即可生成代码:
🔌 运行CodeGeeX2 API服务
CodeGeeX2除了可以通过网页界面提供服务外,还可以通过API接口提供调用和生成服务。
🚀 运行服务
# 请注意将IP和端口,修改为实际使用的
python ./demo/fastapicpu.py --cpu --quantize 4 --chatglm-cpp --model-path ZhipuAI/CodeGeeX2-6B --listen 192.168.1.160 --port 8048🔗 调用API
# 命令行调用api
# 请注意将IP和端口,修改为实际使用的
curl -X POST "http://192.168.1.160:8048" \
-H 'Content-Type: application/json' \
-d '{"lang": "Python", "prompt": "# Write a quick sort function"}'API响应示例:
{
"status": "success",
"result": "def quicksort(arr):\n if len(arr) <= 1:\n return arr\n pivot = arr[len(arr) // 2]\n left = [x for x in arr if x < pivot]\n middle = [x for x in arr if x == pivot]\n right = [x for x in arr if x > pivot]\n return quicksort(left) + middle + quicksort(right)"
}💻 实际应用测试
测试案例1:Python函数生成
用户需求:编写快速排序算法
CodeGeeX2-6B生成:
# language: Python
编写快速排序算法
def quicksort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
less = [i for i in arr[1:] if i <= pivot]
greater = [i for i in arr[1:] if i > pivot]
return quicksort(less) + [pivot] + quicksort(greater)测试案例2:JavaScript异步函数
用户需求:异步获取API数据
CodeGeeX2-6B生成:
// language: JavaScript
异步获取API数据
const fetch = require('node-fetch')
async function getApi() {
const response = await fetch('https://api.github.com/repos/octocat/hello-world')
const json = await response.json()
return json
}
getApi().then(data => {
console.log(data)
})💼 在VSCode中使用
由于CodeGeeX2-6B 是一个基座代码生成模型,不具备聊天能力,所以只能在网页界面调用,或者使用API调用。
如果全功能版本的CodeGeeX2或者CodeGeeX4,那么就可以在VSCode中安装CodeGeeX: AI Coding Assistant,来实现真正的AI辅助编程了。
在浏览器打开 https://marketplace.visualstudio.com/items?itemName=aminer.codegeex,即可安装 CodeGeeX: AI Coding Assistant插件到VSCode使用。
- 安装插件:
- VSCode使用:
✅ CodeGeeX2部署完成
通过完整的CodeGeeX2部署,星睿O6成为了一个强大的智能代码生成平台,为开发者提供专业的编程辅助服务。
🎯 系列总结
经过这10篇文章的完整实践,我们成功在星睿O6上构建了完整的智谱AI大模型生态系统:
🏗️ 构建成果
环境搭建:从PC到ARM设备的完整环境配置
- llama.cpp:通用大模型推理框架,支持多种模型格式
- chatglm.cpp:专为GLM系列优化的推理框架,内存使用更高效
- 两个框架互补使用,发挥各自优势
模型部署:多种类型大模型的部署和优化
- 文本生成模型:GLM-Edge系列(1.5B-4B)、GLM-4系列(9B)、GLM-4.6V-Flash
- 视觉理解模型:GLM-Edge-V系列(2B-5B)、GLM-4V系列(9B)
- 代码生成模型:CodeGeeX2(6B)
- 量化优化:Q4_K_M量化,平衡性能和内存使用
服务化:Web界面和API服务的完整实现
- Web UI:基于Jinja2模板和Gradio的用户界面
- OpenAI兼容API:标准化的API接口,支持多种客户端
- 性能优化:并发处理、缓存机制、监控指标
专项应用:代码生成等专门应用场景的实现
- 多语言代码生成:Python、JavaScript、Java、C++等
- API服务接口:便于集成到开发工具链
🎉 系列实践文章完成!
通过这个完整的10篇文章系列,我们从零开始在星睿O6上构建了完整的智谱AI大模型生态系统,涵盖了文本生成、视觉理解、代码生成等多个维度。这为ARM设备上的AI应用部署提供了完整的参考方案,也为边缘AI的普及应用奠定了坚实基础。