CodeGeeX2 快速上手与多平台推理实战指南:从 transformers 调用到量化加速与 HumanEval-X 评测复现

📅 发布时间:2026/9/29 21:38:23
CodeGeeX2 快速上手与多平台推理实战指南:从 transformers 调用到量化加速与 HumanEval-X 评测复现
大模型代码模型基础模型【免费下载链接】CodeGeeX2CodeGeeX2: A More Powerful Multilingual Code Generation Model项目地址https://gitcode.com/zai-org/CodeGeeX2点击查看免费下载CodeGeeX2 是智谱 AI 开源的多语言代码生成基座模型第二代 CodeGeeX以 60 亿参数在 HumanEval 上取得 35.9% 的 Pass1并支持 CPU、GPU、多卡、Mac、fastllm 与 ChatGLM.cpp 等多种推理路径。本文以仓库根目录 README.md 为主体结合 docs/zh/inference_zh.md 推理教程与demo/、evaluation/、scripts/源码系统讲解模型能力、transformers 快速调用、Gradio/FastAPI 服务部署、多精度与量化推理、多 GPU/Mac/fastllm/ChatGLM.cpp 加速方案以及 HumanEval-X 评测的复现方法读完即可在自己的环境中完成从零部署到推理服务上线再到评测验证的全流程。一、模型概述基于 ChatGLM2 架构的第二代代码生成基座CodeGeeX2 是多语言代码生成模型 CodeGeeXKDD23的第二代模型。与完全在国产华为昇腾芯片平台训练的一代 CodeGeeX 不同CodeGeeX2 基于 ChatGLM2-6B 架构通过加入代码预训练实现得益于 ChatGLM2 的更优性能在多项指标上取得显著提升较 CodeGeeX 提升 107%仅 60 亿参数即超过 150 亿参数的 StarCoder-15B 近 10%。1.1 核心特性更强大的代码能力基于 ChatGLM2-6B 基座语言模型CodeGeeX2-6B 进一步经过了 600B 代码数据预训练。相比一代模型HumanEval-X 评测集的六种编程语言均大幅提升Python 57%、C 71%、Java 54%、JavaScript 83%、Go 56%、Rust 321%在 Python 上达到 35.9% 的 Pass1 一次通过率超越规模更大的 StarCoder-15B。更优秀的模型特性继承 ChatGLM2-6B 模型特性CodeGeeX2-6B 更好支持中英文输入支持最大 8192 序列长度推理速度较一代 CodeGeeX-13B 大幅提升量化后仅需 6GB 显存即可运行支持轻量级本地化部署。更全面的 AI 编程助手CodeGeeX 插件VS Code、JetBrains后端升级支持超过 100 种编程语言新增上下文补全、跨文件补全等实用功能结合 Ask CodeGeeX 交互式 AI 编程助手支持中英文对话解决各种编程问题包括且不限于代码解释、代码翻译、代码纠错、文档生成等。更开放的协议CodeGeeX2-6B 权重对学术研究完全开放填写登记表申请商业使用。从仓库文件结构可以看到项目围绕调用—服务—评测三条主线组织demo/ 提供 Gradio 交互式 DEMOrun_demo.py与 FastAPI 服务fastapicpu.py及多卡加载工具gpus.pyevaluation/ 提供生成generation.py、执行execution.py、评估evaluation.py与结果检查inspect_jsonl.py的完整评测链路benchmark/humanevalx/ 存放六种语言的评测数据。二、快速开始使用 transformers 直接调用2.1 环境准备下载本仓库并使用 pip 安装环境依赖git clone https://gitcode.com/zai-org/CodeGeeX2 cd CodeGeeX2 pip install -r requirements.txtrequirements.txt 中的核心依赖包括transformers4.30.2远程代码加载需要trust_remote_codeTrue、torch2.0、accelerate多卡 dispatch 依赖、sentencepiece分词器、cpm_kernels、gradioDEMO 界面与protobuf。2.2 最小调用示例使用transformers快速调用 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) model model.eval() # remember adding a language tag for better performance 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) 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]))示例中使用 greedy decodingtop_k1便于检查输出结果是否对齐。若使用 CPU 推理将device参数改为cpu即可。也可以手动下载权重到本地git clone https://huggingface.co/THUDM/codegeex2-6b然后改为本地路径加载model_path /path/to/codegeex2-6b tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModel.from_pretrained(model_path, trust_remote_codeTrue)2.3 Prompt 格式要点决定补全质量的关键CodeGeeX2-6B 是一个基座代码生成模型不具备聊天能力聊天能力在插件中的 Ask CodeGeeX 中体验。在使用其补全功能时输入 prompt 需要遵循特定格式以获得最好效果语言标签引导在 prompt 开头加入编程语言标签如# language: Python。完整语言列表定义在 evaluation/utils.py 的LANGUAGE_TAG字典中覆盖 C、C、Java、JavaScript、Go、Rust、TypeScript、SQL、Kotlin、Ruby、Swift、Shell 等 100 余种语言。从源码可见不同语言使用各自注释语法书写标签例如// language: C、!--language: HTML--、-- language: SQL、% language: Matlab这与该语言的注释风格保持一致。以注释形式写 prompt参考 demo/run_demo.py 中predict函数的处理逻辑——当用户选择语言时代码会自动将LANGUAGE_TAG[lang]拼接到 prompt 之前demo/example_inputs.jsonl 给出了跨语言示例输入例如{code: # Write a quick sort function\n, langauge: Python}、{code: // 写一个冒泡排序函数\n, langauge: C}等。三、启动 Gradio DEMO仓库提供了开箱即用的交互式 DEMO基于 Gradio 构建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]3.1 关键命令行参数源自 run_demo.py参数类型默认值说明--model-pathstrTHUDM/codegeex2-6b模型路径或 Hugging Face 模型名--example-pathstrNone默认使用同目录example_inputs.jsonl自定义示例输入文件--quantizeintNone量化位宽支持 4/5/8对应 INT4/INT5/INT8--chatglm-cppflag关闭启用 ChatGLM.cpp 加速后端--fastllmflag关闭启用 fastllm 加速后端--n-gpusint1使用的 GPU 数量1 时走多卡加载--gpuint0指定使用哪块 GPUcuda:0--cpuflag关闭强制使用 CPU 推理--listenstr127.0.0.1服务监听地址--portint7860服务端口--authflag关闭启用身份验证--username/--passwordstrNone配合--auth使用若要启用身份验证先启用--auth再定义--username与--passwordpython run_demo.py --auth --username user --password password # 若要监听所有地址请指定 --listen 0.0.0.03.2 后端加载逻辑从 run_demo.py 的get_model函数可以看出模型的加载优先级多卡--n-gpus 1时调用load_model_on_gpus(model_path, num_gpusn)进行多卡分载ChatGLM.cpp启用--chatglm-cpp时构建chatglm_cpp.Pipeline--quantize 4/5/8对应q4_0/q5_0/q8_0量化精度fastllm启用--fastllm时先用 transformers 加载再通过llm.from_hf(model, dtypeint4/int8/float16)转换纯 transformers默认路径--quantize 4/8时执行model.half().quantize(quantize)并自动选择cuda:gpu、MPStorch.backends.mps.is_built()或 CPU 设备。Gradio 界面还提供了可调的生成参数滑杆Seed默认 8888、Output Sequence Length1~8192默认 128、Temperature默认 0.2、Top K默认 0、Top P默认 0.95以及编程语言下拉框None 全部LANGUAGE_TAG语言点击示例可一键填充输入。四、启动 FastAPI 服务如需以 HTTP 接口对外提供代码补全能力可使用仓库自带的 FastAPI 服务python ./demo/fastapicpu.py usage: fastapicpu.py [-h] [--model-path MODEL_PATH] [--listen ADDRESS] [--port PORT] [--workders NUM] [--cpu] [--half] [--quantize QUANTIZE] [--chatglm-cpp]参数说明源自 fastapicpu.py--cpu启用 CPU 推理--half启用.half()半精度--port默认 7860--workers默认 1。从 device() 函数可以看到启用--chatglm-cpp时根据--half/--quantize决定f16/f32/q4_0/q5_0/q8_0精度否则走 transformers 路径并支持.cuda().half()与 INT4/INT8 量化。4.1 API 使用示例服务启动后通过 POST JSON 请求调用接口默认监听127.0.0.1:7860curl -X POST http://127.0.0.1:7860 \ -H Content-Type: application/json \ -d {lang: Python, prompt: # Write a quick sort function}请求体支持字段源自 fastapicpu.py 的create_item处理逻辑lang编程语言若为 None 则不添加语言标签、prompt必填、max_length默认 128、top_p默认 0.95、temperature默认 0.2、top_k默认 0。响应为 JSON包含response、lang、status、time字段并在服务端打印请求日志。五、多精度与量化推理CodeGeeX2 使用 BF16 训练推理时支持 BF16/FP16/INT8/INT4可根据显卡显存选择合适的精度格式。不同精度下的显存占用基于 PyTorch 2.0 测试利用torch.nn.functional.scaled_dot_product_attention实现高效的 Attention 计算ModelFP16/BF16INT8INT4CodeGeeX-13B26.9 GB14.7 GB-CodeGeeX2-6B13.1 GB8.2 GB5.5 GB默认使用 BF16 精度推理如显卡不支持 BF16❗️使用错误的格式推理结果将出现乱码需要转换为 FP16model AutoModel.from_pretrained(model_path, trust_remote_codeTrue).half().to(cuda)5.1 INT4 量化推理可以下载转换好的 INT4 权重或手动转换如果显卡不支持 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)量化到 INT4 后仅需约 5.5GB 显存配合 MQAMulti-Query Attention与 Flash Attention 带来的推理加速是轻量级本地化部署的推荐方案。六、多 GPU 推理当单卡显存不足以放下整个模型时使用 demo/gpus.py 实现多卡分载from gpus import load_model_on_gpus model load_model_on_gpus(THUDM/codegeex2-6b, num_gpus2)从 gpus.py 源码可以看到其分载原理模型共 30 个可分配层transformer.embedding.word_embeddings、final_layernorm、output_layer、rotary_pos_emb、lm_head各占 1 层transformer.encoder.layers28 层auto_configure_device_map将 30 层均分到num_gpus张卡其中 embedding、final_layernorm、lm_head 等被固定放在第一张卡上——这是因为在 Linux 下model.device会被设置为lm_head.device若word_embeddings与model.device不在同一设备会导致 RuntimeError。最终通过accelerate.dispatch_model完成分发。若num_gpus 2则退化为.half().cuda()单卡加载。README 中给出的多卡调用替换方式为将默认加载代码替换为def get_model(): tokenizer AutoTokenizer.from_pretrained(THUDM/codegeex2-6b, trust_remote_codeTrue) from gpus import load_model_on_gpus # gpus文件在demo文件夹中 model load_model_on_gpus(THUDM/codegeex2-6b, num_gpus2) model model.eval() return tokenizer, model tokenizer, model get_model()七、Mac 推理MPS 后端对于搭载 Apple Silicon 或 AMD GPU 的 Mac可以使用 MPS 后端运行。参考 Apple 官方说明安装 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)八、fastllm 加速推理fastllm 是目前支持 GLM 架构的开源加速框架。首先安装 fastllm_pytoolsgit clone https://github.com/ztxz16/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 可能出现inlining failed in call to always_inline __m256i _mm256_add_epi32编译报错将CMakeLists.txt第 20 行修改为set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pthread --stdc17 -O2)将 Hugging Face 模型转换为 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 中模型接口与 Hugging Face 不完全相同参考 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]也可以直接通过 DEMO 参数启用python ./demo/run_demo.py --fastllm --quantize 4。九、ChatGLM.cpp 量化推理ChatGLM.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]))ChatGLM.cpp 已集成到本仓库DEMO 添加--quantize 4 --chatglm-cpp即可开启 int4q4_0量化加速python ./demo/run_demo.py --quantize 4 --chatglm-cppFastAPI 服务同样支持 ChatGLM.cpp 加速添加相同参数启动python ./demo/fastapicpu.py --quantize 4 --chatglm-cpp测试服务接口curl -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}十、推理性能与部署友好性得益于 Multi-Query Attention 和 Flash AttentionCodeGeeX2 的推理速度较上一代大幅提升。在batch_size1, max_length2048、均使用加速框架、测试硬件为 GeForce RTX-3090 的条件下Model推理速度 (字符/秒)CodeGeeX-13B32CodeGeeX2-6B94结合量化显存表INT4 仅 5.5GB可以看出CodeGeeX2 对部署更加友好6B 参数在 INT4 量化下仅需约 6GB 显存即可运行适合单卡、低显存乃至 CPU 场景的轻量级本地化部署。十一、代码能力评测与复现CodeGeeX2 作为多语言代码生成基座模型代码能力较上一代大幅提升。以下为 HumanEval、HumanEval-X、DS1000 基准上的评测结果评价指标 Passk 定义与论文一致。11.1 HumanEvalPass1/10/100ModelPass1Pass10Pass100CodeGen-16B-multi19.234.655.2CodeGeeX-13B22.939.660.9Codex-12B28.846.872.3CodeT5Plus-16B-mono30.951.676.7Code-Cushman-00133.554.377.4LLaMA-65B23.7-79.3LLaMA2-70B29.9--CodeGen2.5-7B-mono33.458.482.7StarCoder-15B33.261.084.7CodeGeeX2-6B35.962.688.3Pass1使用n20, t0.2, top_p0.95Pass10, Pass100使用n200, t0.8, top_p0.95。11.2 HumanEval-XPass1ModelPythonCJavaJavaScriptGoRustOverallCodeGen-16B-multi19.218.115.018.413.01.814.2CodeGeeX-13B22.917.120.017.614.44.316.0Replit-code-v1-3B22.020.120.120.112.28.617.2CodeGen2.5-7B-multi30.624.329.027.518.920.125.1StarCoder-15B35.528.231.533.221.317.827.9CodeGeeX2-6B35.929.330.832.222.518.128.1Pass1使用n20, t0.2, top_p0.95。11.3 DS1000Pass1ModelMatplotlibNumpyPandasPytorchSciPyScikit-learnTensorFlowOverall# Samples15522029168106115451000CodeGen-16B-Mono31.710.93.47.09.010.815.211.7code-cushman-00140.721.87.912.411.318.012.218.1Codex-00141.826.69.49.715.018.517.220.2CodeGeeX2-6B40.525.514.517.319.324.023.023.1StarCoder-15B51.729.711.421.420.229.524.526.0Codex-00257.043.126.541.831.844.839.339.2Pass1使用n40, t0.2, top_p0.5。11.4 使用仓库脚本复现 HumanEval-X以上 HumanEval / HumanEval-X 结果可使用 scripts/run_humanevalx.sh 复现。脚本通过MODE环境变量控制流程gen仅生成、eval仅评估、both生成并评估默认both依次对python java js cpp go rust六种语言循环执行MODEgen bash ./scripts/run_humanevalx.sh脚本核心流程源自 run_humanevalx.sh配置评测环境设置WORLD_SIZE、DATASEThumanevalx、MODEL_NAMEcodegeex2-6b、MODEL_PATH/pathto/codegeex2-6b/需要按实际路径修改、N_CPU_WORKERS16、TIMEOUT5Rust 的TIMEOUT会自动调整为 300 秒。配置生成参数脚本内嵌了三组采样配置——Pass1 greedyNUM_SAMPLES1, TEMP1.0, TOPK1, GREEDY1、Pass1 估计NUM_SAMPLES20, TEMP0.2, TOPK0, TOPP0.95, GREEDY0、Pass10/Pass100NUM_SAMPLES200, MICRO_BSZ4, TEMP0.8, TOPK0, TOPP0.95, GREEDY0按需注释切换。调用生成脚本执行 evaluation/generation.py传入--model-path、--temperature、--top-p、--top-k、--greedy、--max-length、--samples-per-problem、--data-path对应 benchmark/humanevalx/ 下的humanevalx_{python,java,js,cpp,go,rust}.jsonl.gz等参数完成补全生成。评估与检查执行 evaluation/evaluation.py 计算 Passk再通过 inspect_jsonl.py 汇总结果到 inspect 文本。十二、AI 编程助手与协议说明仓库还开发了支持 VS Code、IntelliJ IDEA、PyCharm、GoLand、WebStorm、Android Studio 等 IDE 的 CodeGeeX 插件在插件中可以更直接地体验 CodeGeeX2 模型在代码生成与补全、添加注释、代码翻译及技术问答方面的能力对应仓库资源图 resources/codegeex_demo.png 展示的插件演示界面。欢迎在 IDE 中下载 CodeGeeX 插件获得更全面的 AI 编程体验。在协议方面本仓库的代码依照 Apache-2.0 协议开源LICENSE模型权重的使用需遵循 MODEL_LICENSE。CodeGeeX2-6B 权重对学术研究完全开放填写登记表即可申请商业使用。十三、使用注意事项汇总CodeGeeX2-6B 是基座代码生成模型不具备聊天能力聊天体验请前往插件中的 Ask CodeGeeX。使用补全功能时prompt 需要以语言标签如# language: Python开头并以注释形式书写可获得最好效果。如果显卡不支持bfloat16格式推理将输出错误内容必须将模型转换为float16model AutoModel.from_pretrained(THUDM/codegeex2-6b, trust_remote_codeTrue).half().cuda()多卡加载时需使用 demo/gpus.py 提供的load_model_on_gpus并注意 embedding/lm_head 等层会被统一放置在第一张卡以避免设备不一致错误。若需对外提供服务建议为 DEMO 配置--auth --username --password身份验证或使用 FastAPI 服务并通过--listen 0.0.0.0监听所有地址。十四、引用如果觉得我们的工作有帮助欢迎引用以下论文inproceedings{zheng2023codegeex, title{CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Benchmarking on HumanEval-X}, author{Qinkai Zheng and Xiao Xia and Xu Zou and Yuxiao Dong and Shan Wang and Yufei Xue and Zihan Wang and Lei Shen and Andi Wang and Yang Li and Teng Su and Zhilin Yang and Jie Tang}, booktitle{Proceedings of the 29th ACM SIGKDD Conference on Knowledge Discovery and Data Mining}, pages{5673--5684}, year{2023} }赞分享大模型代码模型基础模型【免费下载链接】CodeGeeX2CodeGeeX2: A More Powerful Multilingual Code Generation Model项目地址https://gitcode.com/zai-org/CodeGeeX2点击查看免费下载相关推荐CodeGeeX2-6B 推理与评测实践指南从 transformers 快速调用到多平台部署与 HumanEval-X 复现CodeGeeX2 6B 推理与评测实践指南从 transformers 快速调用到多平台部署与 HumanEval X 复现 CodeGeeX2 是多语言代人工智能大模型代码模型模型评测CodeGeeX2 推理教程CPU/多卡/Mac 多平台部署与量化加速实战CodeGeeX2 推理教程CPU/多卡/Mac 多平台部署与量化加速实战 CodeGeeX2 是多语言代码生成模型 CodeGeeXKDD23的第二代人工智能大模型代码模型模型评测CodeGeeX2-6B 多语言代码生成模型推理部署、量化加速与评测实战指南CodeGeeX2 6B 多语言代码生成模型推理部署、量化加速与评测实战指南 CodeGeeX2 是智谱 AI 推出的多语言代码生成基座模型 CodeGeeX人工智能大模型代码模型模型评测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考