TwinStream-LLM
TwinStream-LLM 是一个高效的双阶段LLM推理服务,通过将大型语言模型分割成两部分(A和B)在不同设备上运行,实现更高效的AI模型推理。视频教程:双卡推理Qwen3-32B
项目原理
受TPU内存限制,大参数的LLM量化模型无法再一张卡上进行推理,该项目通过将模型拆分成两部分,由两台设备串行推理,中间通过网线直连传输中间数据。
- Model A: 处理输入tokens并生成隐藏状态,包括embeding/embeding_cache和一半的block/block_cache
- Model B: 接收隐藏状态,生成下一个token,包括剩下一半的block/block_cache和lm_head
- 通信层: 使用gRPC在两个阶段之间传输数据
安装与配置(以pybind项目方案为例)
项目结构
pybind/
├── CMakeLists.txt # CMake构建配置
├── llm.proto # Protocol Buffers定义
├── model_a.cpp # 模型A的C++实现
├── model_b.cpp # 模型B的C++实现
├── server_a.py # 模型A的Python服务端
├── server_b.py # 模型B的Python服务端
└── build/ # 构建输出目录
编译与安装(推荐在python 3.10及以上的venv虚拟环境中进行)
- 下载模型
cd models/qwen3
python3 -m dfss --url=open@sophgo.com:/ext_model_information/LLM/LLM-TPU/qwen3-32b_seq512_a.bmodel
python3 -m dfss --url=open@sophgo.com:/ext_model_information/LLM/LLM-TPU/qwen3-32b_seq512_b.bmodel
- 依赖项
pip install fastapi uvicorn[standard] grpcio grpcio-tools lz4 pybind11[global] numpy transformers jinja2
- 生成grpc代码
cd pybind
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. llm.proto
- 编译model_a和model_b:
mkdir -p build
cd build
cmake ..
make
cp model_* .. && cd ../..
编译完成后,将在build目录下生成model_a.cpython-*.so和model_b.cpython-*.so两个Python扩展模块。
运行server
python pybind/server_b.py
python pybind/server_a.py --b-host 192.168.150.10