Project Icon

llm-api

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

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

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,提供了出色的工具生态系统。
项目侧边栏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号