llm-api

llm-api

灵活易用的跨平台大语言模型API框架

LLM-API是一个灵活的大语言模型API框架,支持在多种硬件平台上运行各类LLM模型。通过简单的YAML配置,它能自动下载模型并提供统一的API接口。支持Docker容器和本地运行,兼容Llama、GPT等多种模型。项目还包含Python客户端和LangChain集成,大大简化了LLM的应用开发过程,使其强大功能更易于开发者使用。

LLM API大语言模型API接口Docker容器GPU加速Github开源项目

LLM API

欢迎来到LLM-API项目!这个项目为您打开了大型语言模型(LLMs)的激动人心的世界,提供了一个多功能的API,让您可以轻松地在不同的消费级硬件配置上运行各种LLMs。无论您喜欢在Docker容器中还是直接在本地机器上运行这些强大的模型,这个解决方案都能适应您的偏好。

使用LLM-API,您只需要一个简单的YAML配置文件就可以开始。该应用程序通过自动下载您选择的模型并无缝执行来简化流程。一旦启动,模型就可以通过统一且直观的API访问。

还有一个类似OpenAI风格的客户端,使得利用您选择的LLM的功能变得容易。您可以在llm-api-python找到Python版本。

除此之外,还有一个LangChain集成,进一步扩展了LLM-API的可能性和潜在应用。您可以在langchain-llm-api探索这个集成。

无论您是开发者、研究人员还是爱好者,LLM-API项目都简化了大型语言模型的使用,使其强大功能和潜力对所有人都触手可及。

我们邀请LLM爱好者、开发者、研究人员和创造者加入这个不断成长的社区。您的贡献、想法和反馈对塑造LLM-API的未来至关重要。无论您想在改进核心功能、开发新的集成还是提出改进建议方面进行合作,您的专业知识都将备受欢迎。

已测试

  • 使用llama.cpp在CPU上运行不同版本的基于Llama的模型(如Llama、Alpaca、Vicuna、Llama 2)
  • 使用GPTQ-for-LLaMa的Llama和Llama 2量化模型
  • 通用huggingface pipeline,如gpt-2、MPT
  • Mistral 7b
  • 使用AWQ的多个量化模型
  • 使用llm-api-python的类OpenAI接口
  • 支持RWKV-LM

使用方法

要在本地机器上运行LLM-API,您必须有一个正常运行的Docker引擎。以下步骤概述了运行LLM-API的过程:

  1. 创建配置文件:首先创建一个config.yaml文件,按照下面描述的配置(使用config.yaml.example中的示例)。
models_dir: /models     # 容器内的目录
model_family: llama     # 也可以是`gptq_llama`或`huggingface`
setup_params:
  key: value
model_params:
  key: value

setup_paramsmodel_params是特定于模型的,请参见下面的模型特定配置。

您可以使用以LLM_API_为前缀的环境变量覆盖上述任何配置,例如:LLM_API_MODELS_DIR=/models

  1. 使用Docker运行LLM-API:在终端中执行以下命令:
docker run -v $PWD/models/:/models:rw -v $PWD/config.yaml:/llm-api/config.yaml:ro -p 8000:8000 --ulimit memlock=16000000000 1b5d/llm-api

此命令启动一个Docker容器,挂载您的本地模型目录、配置文件,并映射8000端口以访问API。

或者,您可以使用此存储库中提供的docker-compose.yaml文件,并使用Docker Compose运行应用程序。执行以下命令:

docker compose up

在首次运行时,LLM-API将根据您config.yaml文件中setup_params定义的配置从Hugging Face下载模型。然后,它会相应地命名本地模型文件。后续运行将引用相同的本地模型文件并将其加载到内存中以实现无缝操作。

端点

LLM-API提供了一套适用于所有大型语言模型(LLMs)的标准端点。这些端点使您能够有效地与模型交互。以下是主要端点:

1. 生成文本

  • POST /generate
    • 请求示例:
      { "prompt": "法国的首都是什么?", "params": { // 额外参数... } }
    • 描述:使用此端点根据给定的提示生成文本。您可以包含额外的参数进行微调和自定义。

2. 异步文本生成

  • POST /agenerate
    • 请求示例:
      { "prompt": "法国的首都是什么?", "params": { // 附加参数... } }
    • 描述: 此端点用于异步文本生成。它允许您启动可以在后台运行的文本生成任务,同时您的应用程序可以继续运行。

3. 文本嵌入

  • POST /embeddings
    • 请求示例:
      { "text": "法国的首都是什么?" }
    • 描述: 使用此端点获取给定文本的嵌入。这对于各种自然语言处理任务(如语义相似度和文本分析)非常有价值。

Huggingface transformers

通常可以使用transformer的AutoConfigAutoModelForCausalLMAutoTokenizer进行推理的模型可以使用model_family: huggingface配置运行,以下是一个示例(运行一个MPT模型):

models_dir: /models
model_family: huggingface
setup_params:
  repo_id: <repo_id>
  tokenizer_repo_id: <repo_id>
  trust_remote_code: True
  config_params:
    init_device: cuda:0
    attn_config:
      attn_impl: triton
model_params:
  device_map: "cuda:0"
  trust_remote_code: True
  torch_dtype: torch.bfloat16

通过以下方法利用LLM-API的灵活性来配置各种属性:

  1. config_params中传递特定的配置属性以微调AutoConfig。这些属性允许您进一步定制语言模型的行为。

  2. 通过在model_params中指定参数直接修改模型的参数。这些参数会被传递到AutoModelForCausalLM.from_pretrainedAutoTokenizer.from_pretrained初始化调用中。

以下是如何在generate(或agenerate)端点中使用参数的示例,但请记住,您可以传递transformer的GenerationConfig接受的任何参数:

POST /generate

curl --location 'localhost:8000/generate' \
--header 'Content-Type: application/json' \
--data '{
    "prompt": "巴黎的首都是什么",
    "params": {
        "max_length": 25,
        "max_new_tokens": 25,
        "do_sample": true,
        "top_k": 40,
        "top_p": 0.95
    }
}'

如果您希望使用GPU加速推理,1b5d/llm-api:latest-gpu镜像就是为此目的设计的。使用Compose运行Docker镜像时,请考虑使用专门的Compose文件来支持GPU:

docker compose -f docker-compose.gpu.yaml up

注意:目前GPU镜像仅支持linux/amd64架构

在CPU上使用Llama模型 - 使用llama.cpp

通过在本地config.yaml文件中配置模型使用,可以简化在CPU上使用Llama的过程。以下是可能的配置:

models_dir: /models
model_family: llama
setup_params:
  repo_id: user/repo_id
  filename: ggml-model-q4_0.bin
model_params:
  n_ctx: 512
  n_parts: -1
  n_gpu_layers: 0
  seed: -1
  use_mmap: True
  n_threads: 8
  n_batch: 2048
  last_n_tokens_size: 64
  lora_base: null
  lora_path: null
  low_vram: False
  tensor_split: null
  rope_freq_base: 10000.0
  rope_freq_scale: 1.0
  verbose: True

确保指定repo_id和filename参数,以指向托管所需模型的Hugging Face仓库。应用程序随后会为您处理下载。

在此模式下运行可以使用Docker镜像1b5d/llm-api:latest,还提供了几个镜像以支持不同的BLAS后端:

  • OpenBLAS: 1b5d/llm-api:latest-openblas
  • cuBLAS: 1b5d/llm-api:latest-cublas
  • CLBlast: 1b5d/llm-api:latest-clblast
  • hipBLAS: 1b5d/llm-api:latest-hipblas

以下示例演示了可以发送到Llama生成和异步生成端点的各种参数:

POST /generate
curl --location 'localhost:8000/generate' \
--header 'Content-Type: application/json' \
--data '{
    "prompt": "巴黎的首都是什么",
    "params": {
        "suffix": null 或 字符串,
        "max_tokens": 128,
        "temperature": 0.8,
        "top_p": 0.95,
        "logprobs": null 或 整数,
        "echo": False,
        "stop": ["\Q"],
        "frequency_penalty": 0.0,
        "presence_penalty": 0.0,
        "repeat_penalty": 1.1,
        "top_k": 40,
    }
}'

AWQ量化模型 - 使用AutoAWQ

使用AutoAWQ实现支持AWQ量化,以下是一个示例配置

models_dir: /models
model_family: autoawq
setup_params:
  repo_id: <仓库ID>
  tokenizer_repo_id: <仓库ID>
  filename: <模型文件名>
model_params:
  trust_remote_code: False
  fuse_layers: False
  safetensors: True
  device_map: "cuda:0"

要运行此模型,需要支持GPU的Docker镜像 1b5d/llm-api:latest-gpu

docker run --gpus all -v $PWD/models/:/models:rw -v $PWD/config.yaml:/llm-api/config.yaml:ro -p 8000:8000 1b5d/llm-api:latest-gpu

或者你可以使用本仓库中提供的docker-compose.gpu.yaml文件:

docker compose -f docker-compose.gpu.yaml up

在GPU上运行Llama - 使用GPTQ-for-LLaMa

重要提示:在GPU上运行Llama或Llama 2之前,请确保在主机上安装了NVIDIA驱动程序。你可以通过执行以下命令来验证NVIDIA环境:

docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi

你应该看到一个显示当前NVIDIA驱动程序版本和相关信息的表格,确认设置正确。

使用GPTQ-for-LLaMa 4位量化运行Llama模型时,你可以使用专门为此目的设计的Docker镜像 1b5d/llm-api:latest-gpu,作为默认镜像的替代选择。你可以使用单独的Docker Compose文件运行此模式:

docker compose -f docker-compose.gpu.yaml up

或者直接运行容器:

docker run --gpus all -v $PWD/models/:/models:rw -v $PWD/config.yaml:/llm-api/config.yaml:ro -p 8000:8000 1b5d/llm-api:latest-gpu

重要提示llm-api:x.x.x-gptq-llama-cudallm-api:x.x.x-gptq-llama-triton 镜像已被废弃。当需要GPU支持时,请切换到 1b5d/llm-api:latest-gpu 镜像

示例配置文件:

models_dir: /models
model_family: gptq_llama
setup_params:
  repo_id: user/repo_id
  filename: <model.safetensors 或 model.pt>
model_params:
  group_size: 128
  wbits: 4
  cuda_visible_devices: "0"
  device: "cuda:0"

示例请求:

POST /generate

curl --location 'localhost:8000/generate' \
--header 'Content-Type: application/json' \
--data '{
    "prompt": "巴黎的首都是什么",
    "params": {
        "temp": 0.8,
        "top_p": 0.95,
        "min_length": 10,
        "max_length": 50
    }
}'

致谢

  • llama.cpp,使得在CPU上运行Llama模型成为可能。
  • llama-cpp-python,为llama.cpp提供Python绑定库。
  • GPTQ-for-LLaMa,为基于Llama的模型提供GPTQ量化实现。
  • AutoAWQ,提供AWQ量化的实现。
  • Huggingface,提供了出色的工具生态系统。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多