
FastChat 如何用 xFasterTransformer 在 Intel CPU 上完成推理与 numactl/MPI 调优【免费下载链接】FastChatAn open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.项目地址: https://gitcode.com/GitHub_Trending/fa/FastChat如果你想在 Intel CPU 上运行 FastChat 推理而不是依赖 GPUFastChat 集成的 xFasterTransformer 框架提供了这条路径通过--enable-xft启用 xFasterTransformer再用numactl或 MPI 在多路服务器上做 NUMA/多 socket 调优以获得更好的推理性能。适用前提是机器为 Intel CPU单路或多路且模型已按 xFasterTransformer 的要求完成转换。本文按官方文档 docs/xFasterTransformer.md 给出完整命令并覆盖两种运行形态交互式 CLI 和服务端 model worker。安装与模型准备先安装 xFasterTransformer 框架文档指向其官方安装指南更多细节可查阅官方文档说明pip install xfastertransformerxFasterTransformer 不能直接使用普通 Hugging Face 格式的模型目录需要用它的转换工具准备模型。文档给出的转换示例如下以 ChatGLM 为例python ./tools/chatglm_convert.py -i ${HF_DATASET_DIR} -o ${OUTPUT_DIR}其中${HF_DATASET_DIR}与${OUTPUT_DIR}是文档原有模板变量需要替换为你本地的 Hugging Face 模型输入目录和转换结果输出目录./tools/chatglm_convert.py属于 xFasterTransformer 仓库自带的工具脚本不是 FastChat 仓库中的文件。后续所有命令里的--model-path都应指向转换完成的输出目录。用 xFasterTransformer 启动 CLI 推理三个与 xFasterTransformer 相关的参数定义见 model_adapter.py--enable-xft在 FastChat 中启用 xFasterTransformer 推理框架--xft-max-seq-len模型可处理的最大 token 长度包含输入 token 长度FastChat 中默认 4096--xft-dtype计算数据类型。文档说明 xFasterTransformer 支持 fp32、fp16、int8、bf16 以及混合类型bf16_fp16、bf16_int8FastChat 的--xft-dtype实际可选值为fp16、bf16、int8、bf16_fp16、bf16_int8。不设置时CPU 上默认使用 bf16_fp16首 token 用 bf16后续 token 用 fp16。最短主路径——使用全部 CPU、fp16 数据类型做 CLI 交互聊天# run inference on all CPUs and using float16 python3 -m fastchat.serve.cli \ --model-path /path/to/models \ --enable-xft \ --xft-dtype fp16/path/to/models替换为你上一步转换完成的模型目录。命令进入 CLI 会话后输入提问并观察模型是否流式返回回答即可确认 xFasterTransformer 路径可用文档没有给出固定成功日志或数值指标以能否正常对话为准。单路调优numactl 绑定 NUMA 节点在多路multi-socket服务器上文档建议用numactl把进程固定到指定 NUMA 节点并开启本地内存分配。以 CLI 为例绑定 numanode 0、使用混合类型bf16_fp16文档注释first token uses bfloat16, and rest tokens use float16# run inference on numanode 0 and with data type bf16_fp16 numactl -N 0 --localalloc \ python3 -m fastchat.serve.cli \ --model-path /path/to/models/chatglm2_6b_cpu/ \ --enable-xft \ --xft-dtype bf16_fp16文档中chatglm2_6b_cpu/是示例路径替换成你的模型目录即可-N 0表示目标 NUMA 节点多路机器上可按需选择其他节点编号。双路调优MPI 跨 2 个 socket 推理需要利用两个 socket 的算力时用mpirun为每个 socket 各启动一个进程分别绑定 numanode 0 和 numanode 1。CLI 形式如下# run inference on numanode 0 and 1 and with data type bf16_fp16 OMP_NUM_THREADS$CORE_NUM_PER_SOCKET LD_PRELOADlibiomp5.so mpirun \ -n 1 numactl -N 0 --localalloc \ python -m fastchat.serve.cli \ --model-path /path/to/models/chatglm2_6b_cpu/ \ --enable-xft \ --xft-dtype bf16_fp16 : \ -n 1 numactl -N 1 --localalloc \ python -m fastchat.serve.cli \ --model-path /path/to/models/chatglm2_6b_cpu/ \ --enable-xft \ --xft-dtype bf16_fp16执行前注意两点$CORE_NUM_PER_SOCKET是文档原有占位变量需要你按实际机器填写单个 socket 的核心数命令中冒号:是mpirun的语法分隔两个 socket 各自的推理进程-n 1表示每个 NUMA 节点上 1 个进程。该命令要求环境已安装 MPI 运行环境及libiomp5.so文档未展开说明需自行确认机器具备。服务端部署model worker 的 numactl / MPI 变体在 FastChat 的多进程服务架构中推理由 model worker 承担文档给出了与 CLI 完全对应的三种启动方式默认配置文档注释max sequence length 4096, no GPU split settingpython3 -m fastchat.serve.model_worker \ --model-path /path/to/models \ --enable-xft \ --xft-dtype bf16_fp16numactl 单节点版# run inference on numanode 0 and with data type bf16_fp16 numactl -N 0 --localalloc python3 -m fastchat.serve.model_worker \ --model-path /path/to/models \ --enable-xft \ --xft-dtype bf16_fp16MPI 双 socket 版与 CLI 版本结构相同只是把入口换成fastchat.serve.model_worker命令模板可直接复用上一节的写法$CORE_NUM_PER_SOCKET与模型路径替换规则不变。model worker 只负责推理进程完整的 controller、web server 启动流程参见 Web server 文档。限制与注意事项模型必须先用 xFasterTransformer 的转换工具处理--model-path指向转换后目录文档只给出了 ChatGLM 转换脚本示例其他模型请按 xFasterTransformer 官方文档的模型准备说明处理。--xft-dtype在 FastChat 中不支持fp32选项虽然文档说明 xFasterTransformer 本身支持 fp32混合类型bf16_fp16、bf16_int8中前段类型用于首 token后段类型用于后续 token。--xft-max-seq-len的取值包含输入长度超长上下文请按此设置默认 4096。文档没有给出基准性能数值或固定成功日志调优收益需要你在自己的硬件上实测对比默认、numactl、MPI 三种方式。【免费下载链接】FastChatAn open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.项目地址: https://gitcode.com/GitHub_Trending/fa/FastChat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考