Project Icon

fastllm

纯C++实现的跨平台大语言模型推理库

fastllm是一个纯C++实现的大语言模型推理库,无第三方依赖,支持多平台部署。这个开源项目具有快速的推理速度,支持多种模型格式,可实现多卡部署和流式输出。fastllm兼容ChatGLM、Qwen、LLAMA等多种模型,提供Python接口和自定义模型结构功能。该项目适用于需要高效、灵活部署大语言模型的场景。

fastllm

英文文档

简介

fastllm是一个纯C++实现的多平台高性能大型模型推理库,无第三方依赖。

部署交流QQ群:831641348

| 快速开始 | 模型获取 |

功能概述

  • 🚀 纯C++实现,便于跨平台移植,可直接在安卓上编译
  • 🚀 在ARM、X86和NVIDIA平台上都能实现较快速度
  • 🚀 支持读取Hugging Face原始模型并直接量化
  • 🚀 支持部署OpenAI API服务器
  • 🚀 支持多卡部署,支持GPU和CPU混合部署
  • 🚀 支持动态批处理,流式输出
  • 🚀 前后端分离设计,便于支持新的计算设备
  • 🚀 目前支持ChatGLM系列、Qwen系列、各种LLAMA模型(如ALPACA、VICUNA等)、BAICHUAN、MOSS、MINICPM等模型
  • 🚀 支持Python自定义模型结构

快速开始

编译

推荐使用cmake编译,需要预先安装gcc、g++(建议9.4或更高版本)、make和cmake(建议3.23或更高版本)。

GPU编译需要预先安装CUDA编译环境,建议使用尽可能新的CUDA版本。

使用以下命令编译:

bash install.sh -DUSE_CUDA=ON # 编译GPU版本
# bash install.sh -DUSE_CUDA=ON -DCUDA_ARCH=89 # 可以指定CUDA架构,如4090使用89架构
# bash install.sh # 仅编译CPU版本

其他平台的编译可参考文档: TFACC平台

运行demo程序(Python)

假设我们的模型位于"~/Qwen2-7B-Instruct/"目录。

编译完成后可以使用以下demo:

# OpenAI API服务器
# 需要安装依赖:pip install -r requirements-server.txt
# 这里在8080端口开启了一个模型名为qwen的服务器
python3 -m ftllm.server -t 16 -p ~/Qwen2-7B-Instruct/ --port 8080 --model_name qwen

# 使用float16精度的模型对话
python3 -m ftllm.chat -t 16 -p ~/Qwen2-7B-Instruct/ 

# 在线量化为int8模型对话
python3 -m ftllm.chat -t 16 -p ~/Qwen2-7B-Instruct/ --dtype int8

# WebUI
# 需要安装依赖:pip install streamlit-chat
python3 -m ftllm.webui -t 16 -p ~/Qwen2-7B-Instruct/ --port 8080

以上demo均可使用--help参数查看详细参数说明,详细参数说明可参考参数说明

目前支持的模型列表请参见:模型列表

一些早期的HuggingFace模型无法直接读取,可以参考模型转换转换为fastllm格式的模型。

可以自定义模型结构,具体请参见自定义模型

运行demo程序(C++)

# 进入fastllm/build-fastllm目录

# 命令行聊天程序,支持打字机效果
./main -p ~/Qwen2-7B-Instruct/ 

# 简易WebUI,使用流式输出 + 动态批处理,可多路并发访问
./webui -p ~/Qwen2-7B-Instruct/ --port 1234 

Windows下的编译推荐使用CMake GUI + Visual Studio,在图形界面中完成。

如编译中遇到问题,尤其是Windows下的编译,可参考FAQ

Python API

# 创建模型
from ftllm import llm
model = llm.model("~/Qwen2-7B-Instruct/")

# 生成回复
print(model.response("你好"))

# 流式生成回复
for response in model.stream_response("你好"):
    print(response, flush=True, end="")

此外,还可以设置CPU线程数等内容,详细API说明请参见ftllm。 此包不包含低级API,如需使用更高级功能,请参考Python绑定API

多卡部署

在Python命令行调用中使用多卡部署

# 使用--device参数设置多卡调用
#--device cuda:1 # 设置单一设备
#--device "['cuda:0', 'cuda:1']" # 将模型平均部署在多个设备上
#--device "{'cuda:0': 10, 'cuda:1': 5, 'cpu': 1} # 将模型按不同比例部署在多个设备上

在ftllm中使用多卡部署

from ftllm import llm
# 支持以下三种方式,需在模型创建前调用
llm.set_device_map("cuda:0") # 将模型部署在单一设备上
llm.set_device_map(["cuda:0", "cuda:1"]) # 将模型平均部署在多个设备上
llm.set_device_map({"cuda:0" : 10, "cuda:1" : 5, "cpu": 1}) # 将模型按不同比例部署在多个设备上

在Python绑定API中使用多卡部署

import pyfastllm as llm
# 支持以下方式,需在模型创建前调用
llm.set_device_map({"cuda:0" : 10, "cuda:1" : 5, "cpu": 1}) # 将模型按不同比例部署在多个设备上

在C++中使用多卡部署

// 支持以下方式,需在模型创建前调用
fastllm::SetDeviceMap({{"cuda:0", 10}, {"cuda:1", 5}, {"cpu", 1}}); // 将模型按不同比例部署在多个设备上

Docker 编译运行

Docker运行需要本地安装NVIDIA Runtime,并将默认runtime设置为nvidia

  1. 安装nvidia-container-runtime
sudo apt-get install nvidia-container-runtime
  1. 将Docker默认runtime修改为nvidia

编辑/etc/docker/daemon.json文件:

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "runtimes": {
      "nvidia": {
          "path": "/usr/bin/nvidia-container-runtime",
          "runtimeArgs": []
      }
   },
   "default-runtime": "nvidia" // 添加此行即可
}
  1. 下载已转换的模型到models目录
models
  chatglm2-6b-fp16.flm
  chatglm2-6b-int8.flm
  1. 编译并启动webui
DOCKER_BUILDKIT=0 docker compose up -d --build

在Android上使用

编译

# PC上编译需下载NDK工具
# 也可尝试在手机上编译,termux中可使用cmake和gcc(无需NDK)
mkdir build-android
cd build-android
export NDK=<your_ndk_directory>
# 如果手机不支持,请移除"-DCMAKE_CXX_FLAGS=-march=armv8.2a+dotprod"(大多数新手机都支持)
cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-23 -DCMAKE_CXX_FLAGS=-march=armv8.2a+dotprod ..
make -j

运行

  1. 在Android设备上安装termux应用
  2. 在termux中执行termux-setup-storage获取读取手机文件的权限
  3. 将NDK编译的main文件和模型文件存入手机,并复制到termux的根目录
  4. 使用命令chmod 777 main授权
  5. 然后可运行main文件,参数格式请参见./main --help
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号