ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

CodeGeeX2 多平台推理部署实战:CPU/多GPU、量化、fastllm 与 ChatGLM.cpp 加速全指南

2026/9/29 2:41:20 拓冰建站 浏览量
CodeGeeX2 多平台推理部署实战:CPU/多GPU、量化、fastllm 与 ChatGLM.cpp 加速全指南 大模型代码模型基础模型【免费下载链接】CodeGeeX2CodeGeeX2: A More Powerful Multilingual Code Generation Model项目地址https://gitcode.com/zai-org/CodeGeeX2点击查看免费下载CodeGeeX2 是智谱 AI 开源的第二代多语言代码生成模型相比一代 CodeGeeX 更强、更快、更轻量是适合本地部署的 AI 代码生成助手。本文以官方推理教程为骨架结合本仓库的 demo 源码与评测配置系统讲解 CodeGeeX2-6B 在 CPU、单/多 GPU、Apple SiliconMPS等平台上的多种推理方式并覆盖 BF16/FP16/INT8/INT4 多精度推理、fastllm 与 ChatGLM.cpp 量化加速等完整方案帮助你根据硬件条件快速选型并落地部署。模型与环境概览CodeGeeX2 是基于 ChatGLM2 架构加入代码预训练实现的多语言代码生成基座模型论文源自 KDD23 的 CodeGeeX 工作本文为第二代主要特点包括参数规模约 6B支持超过 100 种编程语言支持最长 8192 序列长度推理速度较一代 CodeGeeX-13B 大幅提升使用 BF16 训练推理时支持 BF16/FP16/INT8/INT4 多种精度量化后仅需约 6GB 显存即可运行代码能力全面增强根据 README.md 中 HumanEval-X 评测结果在 Python/C/Java/JavaScript/Go/Rust 六种语言上相比一代均大幅提升HumanEval Pass1 达到 35.9%。开始推理前需要先安装环境依赖本仓库 requirements.txt 中声明的关键依赖如下transformers4.30.2 accelerate # 多 GPU 推理时的模型分发 cpm_kernels # ChatGLM 系列模型算子内核 torch2.0 sentencepiece # 分词器依赖 gradio # 运行交互式 Demo protobuf说明模型权重对学术研究完全开放商业使用需按 MODEL_LICENSE 申请授权。快速开始使用 transformers 调用 CodeGeeX2-6B克隆仓库并安装依赖git clone https://gitcode.com/zai-org/CodeGeeX2 cd CodeGeeX2 pip install -r requirements.txt使用 transformers 快速调用以下代码使用transformers快速调用THUDM/codegeex2-6b首次运行时将自动从 Hugging Face 下载权重到本地from transformers import AutoTokenizer, AutoModel tokenizer AutoTokenizer.from_pretrained(THUDM/codegeex2-6b, trust_remote_codeTrue) model AutoModel.from_pretrained(THUDM/codegeex2-6b, trust_remote_codeTrue, devicecuda) # 如使用CPU推理devicecpu model model.eval() # CodeGeeX2支持100种编程语言加入语言标签引导生成相应的语言 prompt # language: Python\n# write a bubble sort function\n inputs tokenizer.encode(prompt, return_tensorspt).to(model.device) outputs model.generate(inputs, max_length256, top_k1) # 示例中使用greedy decoding检查输出结果是否对齐 response tokenizer.decode(outputs[0]) print(response) # language: Python # write a bubble sort function def bubble_sort(list): for i in range(len(list) - 1): for j in range(len(list) - 1): if list[j] list[j 1]: list[j], list[j 1] list[j 1], list[j] return list print(bubble_sort([5, 2, 1, 8, 4]))使用过程中有两个要点必须添加语言标签language tagCodeGeeX2 支持 100 种编程语言通过语言标签引导模型生成指定语言的代码。标签采用所选语言自身的注释格式例如 Python 用# language: Python、C/C 用// language: C、HTML 用!--language: HTML--。完整语言与标签映射见 evaluation/utils.py评测侧以及 demo/run_demo.py 中 Gradio Demo 侧的LANGUAGE_TAG字典两者均包含大量语言条目。prompt 以注释形式书写效果更佳以所选编程语言格式的注释来描述需求能显著提升生成质量demo/example_inputs.jsonl 中内置了多语言示例可供参考例如{code: # Write a quick sort function\n, langauge: Python}。在 demo/run_demo.py 的predict函数中可以看到仓库对 prompt 的处理正是先拼接语言标签再送入模型if lang ! None: prompt LANGUAGE_TAG[lang] \n prompt手动下载权重到本地如果不希望由transformers自动下载也可以手动下载权重后改为本地路径加载。从 Hugging Face 仓库THUDM/codegeex2-6b获取权重文件下载方式参考 Hugging Face 官方指引例如git clone该模型仓库# huggingface下载 git clone https://huggingface.co/THUDM/codegeex2-6b然后将 tokenizer 和 model 路径改为本地路径model_path /path/to/codegeex2-6b tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModel.from_pretrained(model_path, trust_remote_codeTrue)多精度/量化推理按显存选择合适的精度CodeGeeX2 使用 BF16 训练推理时支持 BF16/FP16/INT8/INT4可根据显卡显存选择合适的精度格式。不同精度对应的显存占用如下数据见 README.md 量化性能章节ModelFP16/BF16INT8INT4CodeGeeX-13B26.9 GB14.7 GB-CodeGeeX2-6B13.1 GB8.2 GB5.5 GB显存数据基于 PyTorch 2.0 测试Attention 计算利用torch.nn.functional.scaled_dot_product_attention实现参见 README.md 量化性能说明。BF16/FP16 切换默认使用 BF16 精度进行推理如果显卡不支持 BF16推理结果将出现乱码此时必须转换为 FP16 格式model AutoModel.from_pretrained(model_path, trust_remote_codeTrue).half().to(cuda)INT4 量化推理INT4 量化推理有两种方式直接加载转换好的权重或在加载原始权重后调用模型的quantize()方法手动转换。如果显卡不支持 BF16需要先转换为 FP16 再量化# 下载转换好的权重 model AutoModel.from_pretrained(THUDM/codegeex2-6b-int4, trust_remote_codeTrue) # 手动转换权重 model AutoModel.from_pretrained(THUDM/codegeex2-6b, trust_remote_codeTrue).quantize(4).to(cuda) # 如果显卡不支持BF16需要先转换为FP16格式 model AutoModel.from_pretrained(THUDM/codegeex2-6b, trust_remote_codeTrue).half().quantize(4).to(cuda)在 demo/run_demo.py 中可以看到仓库默认推理路径的等价实现——通过--quantize 4/8参数触发.half().quantize(args.quantize)并加载到目标设备INT4 与 INT8 的量化均由模型trust_remote_code加载的自定义代码提供支持。多 GPU 推理利用 demo/gpus.py 实现模型并行当单卡显存不足以容纳模型时可以使用仓库提供的 demo/gpus.py 实现多 GPU 推理from gpus import load_model_on_gpus model load_model_on_gpus(THUDM/codegeex2-6b, num_gpus2)从 demo/gpus.py 源码可以看到其底层实现逻辑自动设备映射auto_configure_device_map(num_gpus)将模型按层拆分配置到多张卡上。CodeGeeX2-6B 的transformer.encoder.layers共有 28 层加上 word embeddings、final layernorm、output_layer、rotary_pos_emb 与 lm_head 等合计约 30 个层单元按per_gpu_layers 30 / num_gpus均匀分配到各 GPU首卡聚合关键模块源码注释明确指出为避免 Linux 下model.device指向 lm_head与word_embeddings.device不一致导致的 RuntimeError将word_embeddings、final_layernorm、output_layer、rotary_pos_emb、lm_head全部固定到第 0 张卡模型分发num_gpus 2时调用accelerate.dispatch_model(model, device_mapdevice_map)完成层到卡的分发加载过程使用.half()FP16以减少显存占用num_gpus 2时则退化为常规的单卡加载。在 Gradio Demo 中启用多 GPU 只需传入显卡数量即可见 demo/run_demo.pypython ./demo/run_demo.py --n-gpus 2Mac 推理MPS 后端对于搭载 Apple SiliconM 系列芯片或 AMD GPU 的 Mac可以使用 PyTorch 的 MPS 后端运行。首先参考 Apple 官方关于 PyTorch-Metal 的说明安装 PyTorch-Nightly正确版本号应为 2.x.x.dev2023xxxx例如 2.1.0.dev20230729pip3 install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu需要注意在 MacOS 上只支持从本地加载模型提前下载codegeex2-6b或codegeex2-6b-int4权重到本地支持 FP16/INT8/INT4 格式并使用 mps 后端model AutoModel.from_pretrained(model_path, trust_remote_codeTrue).half().to(mps)在 demo/run_demo.py 的get_model中设备选择逻辑会自动探测优先使用 CUDA其次判断torch.backends.mps.is_built()选择 mps最后回退到 CPU。fastllm 加速推理安装 fastllmfastllm 是面向 GLM 架构含 CodeGeeX2 所继承的 ChatGLM2 架构的高性能推理加速框架本仓库的 Demo 原生支持通过它进行加速。首先获取 fastllm 源码并编译安装fastllm_pytoolsgit clone fastllm仓库地址 cd fastllm mkdir build cd build # 使用GPU编译需要添加CUDA路径export CUDA_HOME/usr/local/cuda/bin:$PATHexport PATH$PATH:$CUDA_HOME/bin cmake .. -DUSE_CUDAON # 如果不使用GPU编译 cmake .. -DUSE_CUDAOFF make -j cd tools python setup.py install # 确认安装是否成功在python中 import fastllm_pytools 不报错编译过程中可能遇到两个典型问题官方教程给出了对应解法架构不支持的报错需要调整CMakeLists.txt注释掉下面一行# set(CMAKE_CUDA_ARCHITECTURES native)E5 系列 CPU 的编译报错若出现error: inlining failed in call to always_inline __m256i _mm256_add_epi32(__m256i, __m256i): target specific option mismatch将CMakeLists.txt第 20 行修改为如下内容即可编译成功set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pthread --stdc17 -O2)将 Hugging Face 模型转换为 fastllm 格式在原本的 transformers 调用代码基础上加入两行代码即可将 HF 模型转换成 fastllm 模型# 原本的调用代码 from transformers import AutoTokenizer, AutoModel tokenizer AutoTokenizer.from_pretrained(THUDM/codegeex2-6b, trust_remote_codeTrue) model AutoModel.from_pretrained(THUDM/codegeex2-6b, trust_remote_codeTrue) # 加入下面这两行将huggingface模型转换成fastllm模型 from fastllm_pytools import llm model llm.from_hf(model, tokenizer, dtypefloat16) # dtype支持 float16, int8, int4fastllm 的调用接口fastllm 中模型接口和 huggingface 不完全相同可以参考 demo/run_demo.py 中的相关实现model.direct_query True outputs model.chat(tokenizer, prompt, max_lengthout_seq_length, top_ptop_p, top_ktop_k, temperaturetemperature) response outputs[0]direct_query是 fastllm 的直出模式开关跳过自回归缓存等中间逻辑chat接口直接返回生成结果。在 Demo 中只需添加--fastllm即可启用demo/run_demo.py 内部会根据--quantize 4/8自动选择int4/int8精度否则默认float16并通过llm.set_device_map(device)指定推理设备python ./demo/run_demo.py --fastllm --quantize 4ChatGLM.cpp 量化推理安装 chatglm-cppChatGLM.cpp 是类似 LLaMA.cpp 的全平台量化加速方案支持q4_0/q4_1/q5_0/q5_1/q8_0多种量化精度以及 CPU/CUDA/Metal 多种后端仅用一行代码即可实现推理加速。首先安装 chatglm-cpp如需使用 CUDA 加速需要添加环境变量CMAKE_ARGS-DGGML_CUBLASON如果仅使用 CPU 加速将该环境变量去掉即可CMAKE_ARGS-DGGML_CUBLASON pip install chatglm-cpp -v一行代码量化加载 Hugging Face 模型dtype可指定q4_0,q4_1,q5_0,q5_1,q8_0,f16表示不同的量化类型 import chatglm_cpp pipeline chatglm_cpp.Pipeline(THUDM/codegeex2-6b, dtypeq4_0) # Load HF model and quantize it into int4 Loading checkpoint shards: 100%|███████████████████████████████████████████████| 7/7 [00:0900:00, 1.33s/it] Processing model states: 100%|█████████████████████████████████████████████| 199/199 [00:2100:00, 9.21it/s] ... print(pipeline.generate(# language: Python\n# write a bubble sort function\n, do_sampleFalse)) def bubble_sort(list): for i in range(len(list) - 1): for j in range(len(list) - 1): if list[j] list[j 1]: list[j], list[j 1] list[j 1], list[j] return list print(bubble_sort([5, 4, 3, 2, 1]))在仓库 Demo 中启用 ChatGLM.cppChatGLM.cpp 已集成到本仓库demo/run_demo.py 中通过chatglm_cpp.Pipeline(args.model_path, dtypedtype)构建加速管线其中--quantize 4/5/8会分别映射为q4_0/q5_0/q8_0精度未指定时默认f16。给 demo 添加--quantize 4 --chatglm-cpp即可开启 int4 (q4_0) 量化加速例如python ./demo/run_demo.py --quantize 4 --chatglm-cppFast API 同样支持 ChatGLM.cpp 加速demo/fastapicpu.py 中的设备构造逻辑会优先启用 chatglm-cpp 管线--half对应f16、--quantize对应对应q*_0添加同样参数启动服务python ./demo/fastapicpu.py --quantize 4 --chatglm-cpp测试服务接口Fast API 服务默认监听127.0.0.1:7860可通过 curl 发起 POST 请求测试请求体支持lang编程语言对应LANGUAGE_TAG、prompt、max_length等字段具体字段解析见 demo/fastapicpu.py其中top_p默认 0.95、temperature默认 0.2、top_k默认 0、max_length默认 128curl -X POST http://127.0.0.1:7860 \ -H Content-Type: application/json \ -d {lang: Python, prompt: # Write a bubble sort function, max_length: 512}服务响应以 JSON 形式返回response、lang、status、time字段便于直接对接上层应用。部署实践Demo 与 FastAPI 服务的完整参数说明Gradio Demodemo/run_demo.pyREADME.md 与 demo/run_demo.py 中给出了完整启动方式与参数说明python ./demo/run_demo.py usage: run_demo.py [-h] [--model-path MODEL_PATH] [--example-path EXAMPLE_PATH] [--quantize QUANTIZE] [--chatglm-cpp] [--fastllm] [--n-gpus N_GPUS] [--gpu GPU] [--cpu] [--auth] [--username yourname] [--password yourpassword] [--port PORT] [--listen ADDRESS]关键参数含义参数默认值说明--model-pathTHUDM/codegeex2-6b模型路径或 HF 仓库标识--example-path内置 demo/example_inputs.jsonl示例输入文件路径--quantizeNone量化位数支持 4 / 8INT4 / INT8--chatglm-cpp关闭启用 ChatGLM.cpp 加速管线--fastllm关闭启用 fastllm 加速管线--n-gpus1多 GPU 推理使用的显卡数量--gpu0单卡推理时使用的 GPU 序号--cpu关闭强制使用 CPU 推理--auth关闭启用身份验证配合--username/--password--listen127.0.0.1监听地址监听所有地址用0.0.0.0--port7860服务端口Demo 中 Generation 参数seed 默认 8888、输出长度 128、temperature 0.2、top_k 0、top_p 0.95见 demo/run_demo.py可通过界面滑块实时调节其中语言选择langRadio覆盖了LANGUAGE_TAG中全部约 70 种语言。FastAPI 服务demo/fastapicpu.pypython ./demo/fastapicpu.py usage: fastapicpu.py [-h] [--model-path MODEL_PATH] [--listen ADDRESS] [--port PORT] [--workers NUM] [--cpu] [--half] [--quantize QUANTIZE] [--chatglm-cpp]其中--cpu启用 CPU 推理、--half启用.half()FP16。启动后即可通过上文 curl 命令进行接口测试。常见问题汇总推理输出乱码多半是显卡不支持 BF16 却仍使用 BF16 精度需改用.half()FP16见多精度/量化推理一节fastllm 编译报 architectures not supported注释掉CMakeLists.txt中的set(CMAKE_CUDA_ARCHITECTURES native)E5 系列 CPU 编译 fastllm 失败按上文修改CMakeLists.txt第 20 行显式指定-pthread --stdc17 -O2编译选项多 GPU 加载报 RuntimeError仓库已在 demo/gpus.py 中通过将 embedding/lm_head 等模块固定到首卡规避该问题注意保持num_gpus与实际显卡数量一致Mac 上无法在线加载模型MPS 后端只支持本地权重加载需预先下载codegeex2-6b或codegeex2-6b-int4权重。总结本文从 docs/zh/inference_zh.md 出发完整覆盖了 CodeGeeX2-6B 的六种推理路径transformers 快速调用CPU/GPU、多精度/量化BF16/FP16/INT8/INT4、多 GPU 模型并行、Mac MPS 推理、fastllm 加速与 ChatGLM.cpp 量化并结合 demo/gpus.py、demo/run_demo.py、demo/fastapicpu.py 等源码剖析了各方案的底层实现。选型建议如下显存充足≥16GB直接使用 BF16/FP16 单卡推理效果最佳显存受限约 6GB使用 INT4 量化quantize(4)或 ChatGLM.cppq4_0可在消费级显卡上流畅运行多卡环境使用 demo/gpus.py 的load_model_on_gpus实现按层并行CPU/Mac 用户优先尝试 ChatGLM.cppCPU/Metal 后端或 fastllm 的 CPU 编译版本以获得远超原生 transformers 的推理速度。赞分享大模型代码模型基础模型【免费下载链接】CodeGeeX2CodeGeeX2: A More Powerful Multilingual Code Generation Model项目地址https://gitcode.com/zai-org/CodeGeeX2点击查看免费下载相关推荐CodeGeeX2 推理教程CPU/多卡/Mac 多平台部署与量化加速实战CodeGeeX2 推理教程CPU/多卡/Mac 多平台部署与量化加速实战 CodeGeeX2 是多语言代码生成模型 CodeGeeXKDD23的第二代人工智能大模型代码模型模型评测如何大幅提升CodeGeeX2推理速度fastllm与ChatGLM.cpp加速推理实操指南如何大幅提升CodeGeeX2推理速度fastllm与ChatGLM.cpp加速推理实操指南 CodeGeeX2 是智谱 AI 推出的第二代多语言代码生成模型大模型代码模型基础模型CodeGeeX2-6B 多语言代码生成模型推理部署、量化加速与评测实战指南CodeGeeX2 6B 多语言代码生成模型推理部署、量化加速与评测实战指南 CodeGeeX2 是智谱 AI 推出的多语言代码生成基座模型 CodeGeeX人工智能大模型代码模型模型评测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考