inferflow

inferflow

为大语言模型提供高效灵活的推理解决方案

Inferflow是一款功能强大的大语言模型推理引擎,支持多种文件格式和网络结构。它采用3.5位量化和混合并行推理等创新技术,提高了推理效率。用户通过修改配置文件即可部署新模型,无需编写代码。Inferflow支持GPU/CPU混合推理,为模型部署提供灵活选择。该项目为研究人员和开发者提供了高效易用的LLM推理工具。

Inferflow大语言模型推理引擎模型服务量化Github开源项目

Inferflow

<h4>

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/72f696f9-47e0-4824-8c0f-d5b5b1ef0f1e.svg" alt="版本"> <img src="https://img.shields.io/github/stars/inferflow/inferflow?color=yellow" alt="星标"> <img src="https://img.shields.io/github/issues/inferflow/inferflow?color=red" alt="问题">

</h4>

Inferflow是一个高效且高度可配置的大型语言模型(LLMs)推理引擎。使用Inferflow,用户只需修改相应配置文件中的几行内容,无需编写任何源代码,即可部署大多数常见的transformer模型。更多详情请参阅我们的技术报告

快速链接

  1. 入门指南(Windows版 | Linux、Mac和Windows子系统(WSL)版
  2. 在单个24GB显存的GPU上部署34B或40B模型(如RTX 3090和4090)

里程碑

  • 2024-2-18:增加对混合专家模型(MoE)的支持。
  • 2024-1-17:正式发布0.1.0版本。

主要特性

  1. 可扩展且高度可配置:使用Inferflow部署新模型的典型方式是编辑模型规格文件,而非添加/编辑源代码。我们在Inferflow中实现了一个原子构建块和技术的模块化框架,使其能够组合式地泛化到新模型。只要Inferflow"了解"模型中的原子构建块和技术,就可以部署新模型。
  2. 3.5比特量化:Inferflow实现了2比特、3比特、3.5比特、4比特、5比特、6比特和8比特量化。其中,3.5比特量化是Inferflow新引入的方案。
  3. 多GPU推理的混合模型分区:Inferflow支持多GPU推理,提供三种模型分区策略:按层分区(流水线并行)、按张量分区(张量并行)和混合分区(混合并行)。混合分区很少被其他推理引擎支持。
  4. 广泛的文件格式支持(并安全加载pickle数据):Inferflow支持直接加载多种文件格式的模型,无需依赖外部转换器。支持的格式包括pickle、safetensors、llama.cpp gguf等。众所周知,使用Python代码读取pickle文件存在安全问题。通过在C++中实现简化的pickle解析器,Inferflow支持安全地从pickle数据加载模型。
  5. 广泛的网络类型支持:支持三类transformer模型:仅解码器模型、仅编码器模型和编码器-解码器模型。
  6. GPU/CPU混合推理:支持纯GPU、纯CPU和GPU/CPU混合推理。

以下是Inferflow与其他一些推理引擎的比较:

推理引擎新模型支持支持的文件格式网络结构量化位数多GPU推理的混合并行编程语言
Huggingface Transformers添加/编辑源代码pickle(不安全), safetensors仅解码器, 编码器-解码器, 仅编码器4b, 8bPython
vLLM添加/编辑源代码pickle(不安全), safetensors仅解码器4b, 8bPython
TensorRT-LLM添加/编辑源代码仅解码器, 编码器-解码器, 仅编码器4b, 8bC++, Python
DeepSpeed-MII添加/编辑源代码pickle(不安全), safetensors仅解码器-Python
llama.cpp添加/编辑源代码gguf仅解码器2b, 3b, 4b, 5b, 6b, 8bC/C++
llama2.c添加/编辑源代码llama2.c仅解码器-C
LMDeploy添加/编辑源代码pickle(不安全), TurboMind仅解码器4b, 8bC++, Python
Inferflow编辑配置文件pickle(安全), safetensors, gguf, llama2.c仅解码器, 编码器-解码器, 仅编码器2b, 3b, 3.5b, 4b, 5b, 6b, 8b     ✔     C++

支持矩阵

支持的模型文件格式

  • Pickle(Inferflow在加载pickle格式文件时减少了大多数其他推理引擎的安全问题)
  • Safetensors
  • llama.cpp gguf
  • llama2.c

支持的技术、模块和选项

  • 支持的与模型定义相关的模块和技术:

    • 标准化函数:STD, RMS
    • 激活函数:RELU, GELU, SILU
    • 位置嵌入:ALIBI, RoPE, 正弦
    • 分组查询注意力
    • 并行注意力
  • 支持的与服务相关的技术和选项:

    • 权重和KV缓存元素的线性量化:2比特、3比特、3.5比特、4比特、5比特、6比特、8比特
    • 将部分或全部KV缓存从显存移至普通内存的选项
    • 将输入嵌入张量放置到普通内存的选项
    • 多GPU推理的模型分区策略:按层分区、按张量分区、混合分区
    • 动态批处理
    • 解码策略:贪婪搜索、top-k、top-p、FSD、典型采样、mirostat等

支持的Transformer模型

  • 仅解码器:Inferflow支持多种类型的仅解码器transformer模型。
  • 编码器-解码器:支持某些类型的编码器-解码器模型。
  • 仅编码器:支持某些类型的仅编码器模型。

具有预定义规格文件的模型

用户可以通过编辑模型规格文件来使用Inferflow部署模型。我们已经为一些流行或具有代表性的模型建立了预定义规格文件。以下是这些模型的列表。

  • Aquila (aquila_chat2_34b)
  • Baichuan (baichuan2_7b_chat, baichuan2_13b_chat)
  • BERT (bert-base-multilingual-cased)
  • Bloom (bloomz_3b)
  • ChatGLM (chatglm2_6b)
  • Deepseek (deepseek_moe_16b_base)
  • Facebook m2m100 (facebook_m2m100_418m)
  • Falcon (falcon_7b_instruct, falcon_40b_instruct)
  • FuseLLM (fusellm_7b)
  • Gemma (gemma_2b_it)
  • Internlm (internlm-chat-20b)
  • LLAMA2 (llama2_7b, llama2_7b_chat, llama2_13b_chat)
  • MiniCPM (minicpm_2b_dpo_bf16)
  • Mistral (mistral_7b_instruct)
  • Mixtral (mixtral_8x7b_instruct_v0.1)
  • Open LLAMA (open_llama_3b)
  • OPT (opt_350m, opt_13b, opt_iml_max_30b)
  • Orion (orion_14b_chat)
  • Phi-2 (phi_2)
  • Qwen (qwen1.5_7b_chat)
  • XVERSE (xverse_13b_chat)
  • YI (yi_6b, yi_34b_chat)

入门指南

Windows用户:请参考docs/getting_started.win.md以获取在Windows上构建和运行Inferflow工具和服务的说明。

以下说明适用于LinuxMacWSL(Windows子系统for Linux)。

获取代码

git clone https://github.com/inferflow/inferflow cd inferflow

构建

  • 构建GPU版本(支持GPU/CPU混合推理):

    mkdir build/gpu cd build/gpu cmake ../.. -DUSE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES=75 make install -j 8
  • 构建仅CPU版本:

    mkdir build/cpu cd build/cpu cmake ../.. -DUSE_CUDA=0 make install -j 8

构建成功后,可执行文件会生成并复制到bin/release/目录。

运行LLM推理工具(bin/llm_inference)

  • 示例1:加载一个小型模型并进行推理

    • 步骤1:下载模型

      #> cd {inferflow-root-dir}/data/models/llama2.c/
      #> bash download.sh
      

      除了运行上述批处理脚本,您也可以手动下载模型文件并将它们复制到上述文件夹。源URL和文件名可以在download.sh中找到。

    • 步骤2:运行llm_inference工具:

      #> cd {inferflow-root-dir}/bin/
      #> release/llm_inference llm_inference.tiny.ini
      

      请注意,llm_inferencellm_inference.tiny.ini不必在同一文件夹中(llm_inference.tiny.ini在bin/目录下,而llm_inference在bin/release/目录下)。

  • 示例2:运行llm_inference工具以加载更大的模型进行推理

    • 步骤1:编辑配置文件bin/inferflow_service.ini以选择模型。

      在bin/inferflow_service.ini的"transformer_engine"部分,有多行以"models = "或";models = "开头。 以";"字符开头的行是注释。 要选择一个模型进行推理,请取消注释该模型对应的行,并注释其他模型的行。 默认情况下,选择了phi-2模型。 请参考docs/model_serving_config.md以获取有关编辑inferflow_service配置的更多信息。

    • 步骤2:下载选定的模型

      #> cd {inferflow-root-dir}/data/models/{model-name}/
      #> bash download.sh
      
    • 步骤3:编辑配置文件bin/llm_inference.ini以选择或编辑查询。

      在配置文件中,查询被组织成查询列表。一个查询列表可以包含一个或多个查询。 不同的查询列表用于不同的目的。例如,query_list.decoder_only用于测试仅解码器模型。其详细信息可以在query_list.decoder_only部分配置。 该部分的起始行是"query_count = 1",这意味着该查询列表中只包含一个查询。 在接下来的以query1为键的行中,只有一行未被注释因此有效,而其他行(即以";"字符开头的行)被注释掉了。 您可以通过取消注释某个查询并注释所有其他查询来选择用于测试的查询。当然,您也可以添加新的查询或更改现有查询的内容。

    • 步骤4:运行工具:

      #> cd {inferflow-root-dir}/bin/
      #> release/llm_inference
      

运行Inferflow服务(bin/inferflow_service)

  • 步骤1:编辑服务配置文件(bin/inferflow_service.ini)

  • 步骤2:启动服务:

    #> cd bin
    #> release/inferflow_service
    

测试Inferflow服务

运行HTTP客户端,通过HTTP协议与Inferflow服务交互以获取推理结果。

  • 选项1. 运行Inferflow客户端工具:inferflow_client

    • 步骤1:编辑配置文件(bin/inferflow_client.ini)以设置服务地址、查询文本和选项。

    • 步骤2:运行客户端工具以获取推理结果。

    #> cd bin
    #> release/inferflow_client
    
  • 选项2 CURL命令 你也可以使用CURL命令向Inferflow服务发送HTTP POST请求并获取推理结果。以下是一个例子:

curl -X POST -d '{"text": "写一篇关于西雅图天气的文章。", "res_prefix": "", "decoding_alg": "sample.top_p", "random_seed": 1, "temperature": 0.7, "is_streaming_mode": false}' localhost:8080
  • 选项三. 使用图形界面REST客户端(例如Chrome扩展程序"Tabbed Postman")。

    • URL: http://localhost:8080(如果你从其他机器访问服务,请将"localhost"替换为服务IP)

    • HTTP方法: POST

    • 请求体示例: {"text": "写一篇关于西雅图天气的文章。", "res_prefix": "", "decoding_alg": "sample.top_p", "random_seed": 1, "temperature": 0.7, "is_streaming_mode": 0}

与OpenAI的Chat Completions API的兼容性

Inferflow服务还提供对OpenAI的Chat Completions API的支持。 可以通过以下方式之一测试该API。

  • 选项一: OpenAI Python API库

    以下是示例代码。在运行以下代码之前,请先安装openai Python模块(pip install openai)。

    import openai openai.base_url = "http://localhost:8080" openai.api_key = "sk-no-key-required" is_streaming = True response = openai.chat.completions.create( model="default", messages=[ {"role": "system", "content": "你是一个有帮助的助手。"}, {"role": "user", "content": "写一篇关于西雅图天气的文章。"} ], stream = is_streaming ) if is_streaming: for chunk in response: print(chunk.choices[0].delta.content or "", end = "") else: print(response.choices[0].message.content)
  • 选项二: CURL命令

    curl -X post -d '{"model": "gpt-3.5-turbo","messages": [{"role": "system", "content": "你是一个有帮助的助手。"}, {"role": "user", "content": "写一篇关于西雅图天气的文章。"}], "stream": true}' http://localhost:8080/chat/completions

参考文献

如果你对我们的工作感兴趣,请kindly引用:

@misc{shi2024inferflow, title={Inferflow: an Efficient and Highly Configurable Inference Engine for Large Language Models}, author={Shuming Shi and Enbo Zhao and Deng Cai and Leyang Cui and Xinting Huang and Huayang Li}, year={2024}, eprint={2401.08294}, archivePrefix={arXiv}, primaryClass={cs.CL} }

致谢

Inferflow受到llama.cppllama2.c这些优秀项目的启发。Inferflow的CPU推理部分基于ggml库。Inferflow仅CPU版本中的FP16数据类型来自Half-precision floating-point library。我们对这些源代码和工具的维护者和实现者表示诚挚的感谢。

编辑推荐精选

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

下拉加载更多