TPI-LLM (Tensor Parallelism Inference for Large Language Models) 是一个专为在低资源边缘设备上高效运行大语言模型而设计的推理系统。该项目旨在解决云端 LLM 服务带来的隐私问题,通过创新的内存管理和分布式计算技术,让边缘设备能够本地运行大型语言模型。
通过多设备协作进行张量级别的并行计算,将大型模型分布在多个低资源设备上运行。
实现了智能内存管理策略,动态加载和卸载模型权重,显著降低峰值内存需求。例如,通过 MemoryManager
类管理模型块的加载与释放,确保在有限内存条件下高效运行。
设计了自定义通信协议,优化设备间数据传输,降低延迟。
split_pretrained_model
函数将原始模型权重分割为多个部分get_layers_in_sharded_weights
分析分片文件中的层信息MemoryManager
类实现了动态加载和卸载模型块的核心逻辑socket
实现节点间通信CommunicatorBase
抽象类及具体实现(如 CommunicatorMaster
和 CommunicatorClient
)huggingface-cli download --resume-download chargoddard/Yi-34B-Llama --local-dir ./model --local-dir-use-symlinks False
# 添加 PYTHONPATH 到 .bashrc
export PYTHONPATH=<PATH-TO-TPI-LLM>/src
# 创建 conda 环境
conda create -n tpi-llm python=3.9
conda activate tpi-llm
pip install -r requirements.txt
单机多进程模拟分布式环境(启动 5 个 5g 内存节点):
python examples/run_multiprocess.py --world_size 5 --model_type llama --model_path ./model --prompt "你好" --length 20 --memory_window 5
成功在 32GB 机器上运行 BF16 版本的 Yi-34B 模型,虽然速度较慢,但能够正常运行就是一个重大成功。这个思路如果能推广到 GPU 机器中,让大量消费级 GPU 运行大规格的 LLM,将具有重要意义。
为了验证 TPI-LLM 的优势,我们同时使用 llama.cpp 运行相同模型进行对比:
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake .. -DLLAMA_AVX2=ON -DLLAMA_AVX512=OFF -DLLAMA_CURL=OFF
make -j8
# 转换为 GGUF 格式
python3 convert.py models/Yi-34B/ --outtype f16
# 量化压缩
./quantize ./models/Yi-34B/ggml-model-f16.gguf ./models/Yi-34B/ggml-model-q4_0.gguf q4_0
./main -m ./models/Yi-34B/ggml-model-q4_0.gguf \
--threads 8 \
--ctx-size 2048 \
--temp 0.8 \
--mlock \
-n 512
TPI-LLM 项目展示了在资源受限环境下运行大型语言模型的可能性,为边缘 AI 应用提供了新的解决方案。虽然当前主要在 CPU 环境下验证,但其核心思想具有推广到 GPU 分布式环境的潜力。
这项研究为大模型的边缘部署开辟了新的技术路径,具有重要的学术价值和实用意义。