HonestQiao · 8 小时前 · 北京

【星睿O6评测】从零玩转智谱AI全栈大模型之10-在星睿O6上部署CodeGeeX2实现智能代码生成

🎯 本文目标:在星睿O6上部署CodeGeeX2实现智能代码生成,完成整个智谱AI全栈大模型生态系统的构建,让星睿O6成为真正的AI开发工作站。

经过查阅资料和深入学习,在星睿O6开发板上成功部署了智谱AI系列大模型,包括文本生成大模型、视觉大模型,以及代码生成大模型。

001.jpg

在学习研究的过程中,我做了详细的笔记,经过整理,成为本系列文章,分享给大家。

通过本系列文章,您将了解到:

  • 第一阶段:开发环境准备

    • 第一篇:星睿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编程助手和更开放的协议等。

002.jpg

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/

003.jpg

下载完成后,查看具体的模型文件:

# 检查模型文件
ls -la ZhipuAI/CodeGeeX2-6B/

004.jpg

模型选择说明

  • 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 tiktoken
  • protobuf错误

    # 如果出现protobuf错误:
    # ImportError: requires the protobuf library but it was not found in your environment.
    pip install protobuf
  • vocab_size错误

    # 如果出现vocab_size错误
    # AttributeError: ChatGLMTokenizer has no attribute vocab_size
    # 则卸载 transformers-4.57.3
    pip uninstall transformers
    pip install transformers==4.33.2
  • cpm_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

错误处理策略

  1. 依赖版本冲突:使用指定的transformers版本
  2. 内存不足:增加swap空间
  3. CUDA问题:确认使用CPU模式
  4. 缺少模块:逐个安装缺失的依赖包

✅ 最终运行

# 请注意将IP和端口,修改为实际使用的
python ./demo/run_demo.py --cpu --quantize 4 --chatglm-cpp --model-path ZhipuAI/CodeGeeX2-6B --listen 192.168.1.160 --port 8048

运行成功后,会提示网页服务的地址:
005.jpg

🌐 访问网页界面

在浏览器打开上一步显示的网页服务的地址,就可以打开在线代码生成界面:
006.jpg
007.jpg

选择语言,给出需求,点击Generate,即可生成代码:
008.jpg

🔌 运行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使用。

  • 安装插件:
    009.jpg
  • VSCode使用:
    010.jpg

✅ CodeGeeX2部署完成

通过完整的CodeGeeX2部署,星睿O6成为了一个强大的智能代码生成平台,为开发者提供专业的编程辅助服务。

🎯 系列总结

经过这10篇文章的完整实践,我们成功在星睿O6上构建了完整的智谱AI大模型生态系统:

🏗️ 构建成果

  1. 环境搭建:从PC到ARM设备的完整环境配置

    • llama.cpp:通用大模型推理框架,支持多种模型格式
    • chatglm.cpp:专为GLM系列优化的推理框架,内存使用更高效
    • 两个框架互补使用,发挥各自优势
  2. 模型部署:多种类型大模型的部署和优化

    • 文本生成模型: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量化,平衡性能和内存使用
  3. 服务化:Web界面和API服务的完整实现

    • Web UI:基于Jinja2模板和Gradio的用户界面
    • OpenAI兼容API:标准化的API接口,支持多种客户端
    • 性能优化:并发处理、缓存机制、监控指标
  4. 专项应用:代码生成等专门应用场景的实现

    • 多语言代码生成:Python、JavaScript、Java、C++等
    • API服务接口:便于集成到开发工具链

🎉 系列实践文章完成!

通过这个完整的10篇文章系列,我们从零开始在星睿O6上构建了完整的智谱AI大模型生态系统,涵盖了文本生成、视觉理解、代码生成等多个维度。这为ARM设备上的AI应用部署提供了完整的参考方案,也为边缘AI的普及应用奠定了坚实基础。

推荐阅读
关注数
1
内容数
11
此芯AI PC开发套件瑞莎“星睿O6”评测
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息