news 2026/9/6 16:15:46

FastChat 集成 xFasterTransformer:在 Intel CPU 上加速大模型推理的完整实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastChat 集成 xFasterTransformer:在 Intel CPU 上加速大模型推理的完整实践

FastChat 集成 xFasterTransformer:在 Intel CPU 上加速大模型推理的完整实践

【免费下载链接】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

本文围绕 FastChat 仓库中的 xFasterTransformer 集成方案展开:如何安装 Intel 的 xFasterTransformer 推理框架、准备模型权重、配置--enable-xft/--xft-max-seq-len/--xft-dtype三个核心参数,并在 CLI 与 model worker 两种形态下(含 numactl 与 MPI 多路并行策略)跑通 CPU 推理。读完本文,你将掌握 FastChat 中 xFT 推理链路从参数解析到底层generate_stream_xft流式生成的完整调用链,以及多插槽服务器上的 NUMA 调优方法。

一、xFasterTransformer 是什么,FastChat 为什么集成它

xFasterTransformer 是 Intel 推出的针对 CPU 优化的 Transformer 推理框架。FastChat 将其定制集成进来,核心目标只有一个:在 Intel CPU 上提供更快的推理速度。对于没有 GPU、或希望在 CPU 集群上部署 Vicuna / ChatGLM 等模型的团队,这是一条比纯 PyTorch CPU 推理更快的路径。

FastChat 中的集成由三块代码构成,后文会逐一展开:

  • fastchat/modules/xfastertransformer.py:定义XftConfig配置数据类与load_xft_model模型加载入口;
  • fastchat/model/model_xfastertransformer.py:实现generate_stream_xft流式生成函数;
  • fastchat/model/model_adapter.py:注册--enable-xft等命令行参数,并负责模型加载与生成函数的分发。

二、安装 xFasterTransformer

xFasterTransformer 是一个独立的 pip 包,不在 FastChat 的默认依赖中,需要单独安装:

pip install xfastertransformer

安装细节(支持的 CPU 指令集、平台要求等)请参考 xFasterTransformer 官方文档的安装章节。安装完成后,FastChat 侧无需任何额外配置,只要启动时加上--enable-xft即可启用。

源码层面的印证在 fastchat/modules/xfastertransformer.py 的load_xft_model中:加载时会先import xfastertransformer,若导入失败会打印Error: Failed to load xFasterTransformer.并直接sys.exit(-1)退出,这正是未安装该包时的表现。

三、准备模型权重

xFasterTransformer 需要专用格式转换后的权重,不能直接使用 Hugging Face 原始目录。以 ChatGLM 为例,转换命令为:

python ./tools/chatglm_convert.py -i ${HF_DATASET_DIR} -o ${OUTPUT_DIR}

其中-i是 Hugging Face 模型目录,-o是转换后的输出目录;其他模型的转换脚本类似,详见 xFasterTransformer 官方文档的 "Prepare Model" 章节。后续所有 FastChat 命令中的--model-path都应指向转换后的目录(例如chatglm2_6b_cpu)。

四、三个核心参数详解

FastChat 暴露了三个 xFT 专用参数,其定义统一位于 fastchat/model/model_adapter.py 的add_model_args中,因此 CLI 和 model worker 均可使用:

参数类型默认值说明
--enable-xftflagFalse启用 xFasterTransformer 推理框架。未指定时xft_configNone,走普通 PyTorch 加载路径
--xft-max-seq-lenint4096模型可处理的最大 token 长度,包含输入 token 长度。对应XftConfig.max_seq_len
--xft-dtypestrNonexFT 计算用的数据类型,可选fp16bf16int8bf16_fp16bf16_int8。混合类型如bf16_fp16表示首 token 用 bfloat16、后续 token 用 float16

--xft-dtype未指定时的行为值得注意:fastchat/modules/xfastertransformer.py 中,若data_type为空则回退为bf16_fp16——即参数帮助文本所述"CPU 上首个 token 用 bfloat16、后续 token 用 float16"的默认策略。各数据类型在不同 CPU 平台上的支持情况,请参照 xFasterTransformer 官方的 Data Type Support 说明。

XftConfig的完整默认值(fastchat/modules/xfastertransformer.py)还包括beam_width=1num_return_sequences=1padding=Trueearly_stopping=False等,这些字段最终会透传给底层生成接口(见第六节)。

五、CLI 方式启动:单核、numactl 与 MPI 三种策略

5.1 最简启动(fp16)

# 使用 float16 在全部 CPU 上运行推理 python3 -m fastchat.serve.cli \ --model-path /path/to/models \ --enable-xft \ --xft-dtype fp16

5.2 多插槽服务器上使用 numactl

在多路(multi-socket)服务器上,将进程绑定到单个 NUMA 节点并本地分配内存可以减少跨插槽内存访问,官方推荐的命令如下:

# 绑定 numanode 0,数据类型 bf16_fp16(首 token 用 bfloat16,其余 token 用 float16) numactl -N 0 --localalloc \ python3 -m fastchat.serve.cli \ --model-path /path/to/models/chatglm2_6b_cpu/ \ --enable-xft \ --xft-dtype bf16_fp16

5.3 使用 MPI 在两个插槽上并行推理

xFasterTransformer 支持通过 MPI 把模型切分到两个 socket 上并行计算。官方文档给出的双路启动方式(冒号分隔两组进程):

# 在 numanode 0 和 1 上各启动一个进程,数据类型 bf16_fp16 OMP_NUM_THREADS=$CORE_NUM_PER_SOCKET LD_PRELOAD=libiomp5.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

其中OMP_NUM_THREADS需设置为每插槽的物理核心数,LD_PRELOAD=libiomp5.so用于统一 OpenMP 运行库。MPI 模式在代码中确有对应处理:load_xft_model 在model.model.rank > 0时会让非 rank-0 进程进入while True: model.model.generate()循环挂起等待——因为只有 rank 0 负责向 FastChat 返回 token,其余进程只参与分布式前向计算。

一个容易踩的坑:xFasterTransformer 目前仅支持 CPU。在 fastchat/serve/cli.py 与 fastchat/serve/model_worker.py 中都可以看到,启用--enable-xft后若--device不是cpu,FastChat 会打印xFasterTransformer now is only support CPUs. Reset device to CPU并自动把设备重置为 CPU,无需手动指定。

六、源码级原理:xFT 在 FastChat 中的完整调用链

结合仓库源码,可以还原--enable-xft之后的完整执行路径:

1. 参数解析与配置构建。CLI 入口 fastchat/serve/cli.py 检测到args.enable_xft后,构造XftConfig(max_seq_len=args.xft_max_seq_len, data_type=args.xft_dtype)并作为xft_config传入chat_loop

2. 模型加载分派。load_model 中,xFT 分支优先于常规 HuggingFace 加载路径:

elif xft_config: model, tokenizer = load_xft_model(model_path, xft_config) return model, tokenizer

load_xft_model 内部做三件事:用 Hugging FaceAutoTokenizerpadding_side="left"trust_remote_code=True)加载分词器;调用xfastertransformer.AutoModel.from_pretrained(model_path, dtype=data_type)加载模型;最后把二者封装为XftModel

3. 生成函数路由。get_generate_stream_function 通过模型类型字符串做分派:

model_type = str(type(model)).lower() is_xft = "xft" in model_type ... elif is_xft: return generate_stream_xft

即只要加载出的模型对象类型名包含xft,推理就自动切换到 xFT 专用的流式生成器。

4. 流式生成实现。generate_stream_xft 的工作方式与普通 PyTorch 路径明显不同:

  • 它用tokenizer(prompt, padding=model.config.padding)直接得到input_ids,并以max_length = max_new_tokens + input_echo_len作为生成长度上限——这与--xft-max-seq-len的语义呼应:最大序列长度包含输入 token
  • 采样参数中,repetition_penalty被映射为 xFT 的length_penaltynum_beams/num_return_sequences/early_stopping均取自XftConfig
  • 生成在独立Thread中调用model.model.generate,配合 transformers 的TextIteratorStreamer实现逐 token 流式输出;源码中temperaturetop_p目前以注释形式占位(unused now, and placehold for future),意味着该路径暂不走这些采样参数;
  • 每个 yield 的 chunk 都携带prompt_tokens/completion_tokens/total_tokens的 usage 统计,结束时根据是否达到max_new_tokens返回finish_reasonlengthstop

七、以 model worker 形式部署

在 FastChat 的 controller/worker 架构下,xFasterTransformer 同样通过三个参数启用,启动命令与 CLI 完全对称:

# 默认配置加载模型(最大序列长度 4096) python3 -m fastchat.serve.model_worker \ --model-path /path/to/models \ --enable-xft \ --xft-dtype bf16_fp16

多插槽服务器上同样建议配合 numactl:

# 绑定 numanode 0,数据类型 bf16_fp16 numactl -N 0 --localalloc python3 -m fastchat.serve.model_worker \ --model-path /path/to/models \ --enable-xft \ --xft-dtype bf16_fp16

MPI 双插槽版本:

# 在 numanode 0 和 1 上各运行一个 worker,数据类型 bf16_fp16 OMP_NUM_THREADS=$CORE_NUM_PER_SOCKET LD_PRELOAD=libiomp5.so mpirun \ -n 1 numactl -N 0 --localalloc python -m fastchat.serve.model_worker \ --model-path /path/to/models \ --enable-xft \ --xft-dtype bf16_fp16 : \ -n 1 numactl -N 1 --localalloc python -m fastchat.serve.model_worker \ --model-path /path/to/models \ --enable-xft \ --xft-dtype bf16_fp16

实现上,fastchat/serve/model_worker.py 的create_model_worker与 CLI 使用完全相同的XftConfig构建逻辑,再把xft_config透传给ModelWorker构造函数(model_worker.py);多模型场景下 fastchat/serve/multi_model_worker.py 也有相同的 xFT 分支。

八、实践要点小结

  1. 平台前提:xFasterTransformer 面向 Intel CPU(AVX512/AMX 等指令集收益最大),设备固定为 CPU,FastChat 会自动纠正非 CPU 的--device
  2. 权重必须转换:先用 xFasterTransformer 的 convert 脚本把 HF 权重转为专用格式,--model-path指向转换结果;
  3. 参数语义--xft-max-seq-len(默认 4096)是含输入在内的总长上限;--xft-dtype缺省回退为bf16_fp16
  4. NUMA 调优:单路用numactl -N <node> --localalloc,双路用mpirun冒号分隔两组进程并预设OMP_NUM_THREADS
  5. 采样限制:从 generate_stream_xft 的占位注释看,该路径当前未启用temperature/top_p,主要受repetition_penalty(映射为 length_penalty)与XftConfig中的 beam 相关字段控制,选型时需注意与普通 CPU 推理路径的行为差异。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 16:15:02

Workbench LS-DYNA显式动力学分析:从前处理到后处理实战解析

简介&#xff1a;《Workbench LS-DYNA技术培训》是一份面向结构仿真工程师的显式动力学分析培训资料&#xff0c;聚焦ANSYS Workbench LS-DYNA的前后处理、几何建模与求解设置。该PDF共1个文件&#xff0c;约3.74MB&#xff0c;内容从LS-DYNA程序在金属成型、冲击碰撞、爆炸及流…

作者头像 李华
网站建设 2026/9/6 16:14:55

基于8086的交通灯控制系统设计:从硬件架构到汇编实现详解

简介&#xff1a;这是一份基于8086微处理器的交通灯控制系统课程设计说明书&#xff0c;适合学习《微机原理与接口技术》、汇编语言及接口技术的本专科学生参考。文档围绕交通信号灯红、绿、黄定时切换与倒计时显示需求&#xff0c;给出从任务分析、总体方案设计、8255A与8253等…

作者头像 李华
网站建设 2026/9/6 16:13:35

磁力泵从零制作全流程:结构原理、装配调试与故障排查

简介&#xff1a;一项磁力泵制作方法的专利技术文档&#xff0c;面向流体机械、泵类设计及磁传动技术领域的工程技术人员&#xff0c;旨在解决传统单面磁力泵扭矩受限、轴承冷却与润滑条件不佳等痛点。文档围绕双面或多面磁偶合驱动创新&#xff0c;详细说明了主动器与被动器在…

作者头像 李华
网站建设 2026/9/6 16:10:17

双活数据中心原理图怎么画?从架构设计到评审要点全解析

简介&#xff1a;面向数据中心架构师、运维工程师及容灾方案规划人员&#xff0c;这份PPT以可修改原图形式&#xff0c;完整呈现双活数据中心的核心原理与拓扑设计&#xff0c;帮助读者快速理解两地三中心、主备故障域、仲裁节点等关键概念。资源为单个PPT文件&#xff0c;约3.…

作者头像 李华
网站建设 2026/9/6 16:07:34

一张照片就能实时换脸?Deep-Live-Cam 免费安装教程与上手指南

一张照片就能实时换脸&#xff1f;Deep-Live-Cam 免费安装教程与上手指南 【免费下载链接】Deep-Live-Cam real time face swap and one-click video deepfake with only a single image 项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam 周五晚上&…

作者头像 李华