LocalAI——一款可在消费级硬件上本地运行 LLMs的AI应用

技术
前言

在AI盛起的当下,各类AI应用不断地出现在人们的视野中,AI正在重塑着各行各业。笔者前前后后调研过无数个AI应用项目,它们都是各自应用场景中的佼佼者。今天介绍的LocalAI 是一个符合 OpenAI API 规范的 REST API,用于本地推理。它允许您在消费级硬件上本地或本地运行 LLMs(不仅仅是)支持多个与 ggml 格式兼容的模型系列,不需要 GPU。

相信如果认真阅读了本文您一定会有收获,喜欢本文的请点赞、收藏、转发,这样将给笔者带来更多的动力!

LocalAI使用示例一览:

picture.image

这个列表中有很多项目笔者之前都有过专门的文章介绍,这里放出相关链接,感兴趣的同学可自行查看:

GPT4All——可本地布署的AI助理

Auto-GPT知多少

Flowise——通过拖放界面构建定制的LLM流程

基于LangChain的优秀项目资源库

LangChain 完整指南:使用大语言模型构建强大的应用程序

privatGPT——私有化GPT模型的全新应用

另外,LocalAI与Flowise结合还能有更奇妙的用处,比如本地打好Embedding存入向量数据库中来辅助搜索、分类、推荐和AIGC等,可用于打造一个完全智能化的知识库(关于这块有需求的可以找笔者私聊)。

picture.image

详见LocalAI Embeddings - FlowiseAI[1],大家可以结合笔者之前Flowise的文章一起看。

picture.image

LocalAI介绍

LocalAI 是一个符合 OpenAI API 规范的 REST API,用于本地推理。它允许您在消费级硬件上本地或本地运行 LLMs(不仅仅是)支持多个与 ggml 格式兼容的模型系列。不需要 GPU。

有关支持的模型系列列表,请参见模型兼容性表[5]。

简而言之:

•本地的 OpenAI 替代 REST API。您拥有自己的数据。 •不需要 GPU。也不需要互联网访问。可选的,GPU 加速在 llama.cpp 兼容的 LLM 中可用。请参见构建说明[6]。 •支持多个模型、音频转录、使用 GPT 进行文本生成、使用稳定扩散进行图像生成(实验性) •一旦第一次加载,它会将模型加载到内存中,以加快推理速度 •不使用 shell-out,而是使用 C++ 绑定进行更快的推理和更好的性能。

LocalAI 由Ettore Di Giacinto[7]创建,是一个社区驱动的项目,专注于使 AI 对任何人都可访问。欢迎任何贡献、反馈和 PR!

请参见示例[8],了解如何将 LocalAI 与其他流行项目集成:

ChatGPT OSS 替代品 [9]

picture.image

图像生成 [10]

picture.image

Telegram 机器人 [11]

picture.image

Flowise [12]

picture.image

请参见入门指南[13]和示例[14]部分,了解如何使用 LocalAI。

有关精选模型的列表,请查看模型库[15]

可用的模型

LocalAI兼容llama.cpp[16]支持的模型,还支持GPT4ALL-J[17]和cerebras-GPT with ggml[18]。

硬件要求

根据您尝试运行的模型,可能需要更多的RAM或CPU资源。此外,还可以在这里[19]查看基于ggml的后端的要求。rwkv在资源上消耗较少。

模型兼容性表格

除了基于llama的模型之外,LocalAI还与其他架构兼容。下表列出了所有兼容的模型系列及其关联的绑定存储库。

| 后端和绑定 | 兼容的模型 | 完整度/聊天端点 | 音频转录/图像 | 嵌入支持 | Token 流支持 | 加速 | | llama[20] (binding[21]) | Vicuna, Alpaca, LLaMa | 是 | 否 | 是 | 是 | CUDA, openCL, cuBLAS, Metal | | gpt4all-llama[22] | Vicuna, Alpaca, LLaMa | 是 | 否 | 否 | 是 | N/A | | gpt4all-mpt[23] | MPT | 是 | 否 | 否 | 是 | N/A | | gpt4all-j[24] | GPT4ALL-J | 是 | 否 | 否 | 是 | N/A | | falcon[25] (binding[26]) | Falcon (*** 仅限7b) | 是 | 否 | 否 | 否 | N/A | | gpt2[27] (binding[28]) | GPT2, Cerebras | 是 | 否 | 否 | 否 | N/A | | dolly[29] (binding[30]) | Dolly | 是 | 否 | 否 | 否 | N/A | | gptj[31] (binding[32]) | GPTJ | 是 | 否 | 否 | 否 | N/A | | mpt[33] (binding[34]) | MPT | 是 | 否 | 否 | 否 | N/A | | replit[35] (binding[36]) | Replit | 是 | 否 | 否 | 否 | N/A | | gptneox[37] (binding[38]) | GPT NeoX, RedPajama, StableLM | 是 | 否 | 否 | 否 | N/A | | starcoder[39] (binding[40]) | Starcoder | 是 | 否 | 否 | 否 | | | bloomz[41] (binding[42]) | Bloom | 是 | 否 | 否 | 否 | | | rwkv[43] (binding[44]) | rwkv | 是 | 否 | 是 | 是 | | | bert[45] (binding[46]) | bert | 否 | 否 | 是 | 否 | | | whisper[47] | whisper | 否 | 音频 | 否 | 否 | | | stablediffusion[48] (binding[49]) | stablediffusion | 否 | 图像 | 否 | 否 | | | langchain-huggingface[50] | 通过HuggingFace API支持的任何文本生成器 | 是 | 否 | 否 | 否 | |

经过测试,LocalAI与以下模型兼容:

• 自动通过 CI 使用 OpenLLAMA 和 GPT4ALL 进行测试。 • LLaMA 🦙 • Vicuna[51] • Alpaca[52] • GPT4ALL[53](还请参阅使用 GPT4All[54]) • GPT4ALL-J[55](无需更改) • Koala[56] 🐨 • Cerebras-GPT • WizardLM[57] • RWKV[58] 模型使用 rwkv.cpp[59] • bloom.cpp[60] • Chinese LLaMA / Alpaca[61] • Vigogne (French)[62] • OpenBuddy 🐶 (多语言)[63] • Pygmalion 7B / Metharme 7B[64] • HuggingFace Inference[65] 通过 API 可用的模型

注意:对于一些旧的模型,您可能需要将其转换为新的格式。有关详情,请参阅 llama.cpp 中的README[66]。例如,运行 gpt4all

RWKV

关于如何运行 rwkv 模型的完整示例可在 examples[67] 中找到。

注意:rwkv 模型需要在 YAML 配置文件中指定后端为 rwkv,并且还需要提供与模型相关联的分词器:


          
36464540 -rw-r--r--  1 mudler mudler 1.2G May  3 10:51 rwkv_small
          
36464543 -rw-r--r--  1 mudler mudler 2.4M May  3 10:51 rwkv_small.tokenizer.json
      

新闻

•🔥🔥🔥 2023年6月19日:v1.19.0 :CUDA支持!发布说明[68]更新日志[69] •🔥🔥🔥 2023年6月6日:v1.18.0 :许多更新、新功能和更多内容 🚀,请查看发布说明[70]! •2023年5月29日:LocalAI现在有一个网站,https://localai.io[71]!请查看专门的新闻栏目[72]!

欲了解最新消息,请关注Twitter@LocalAI_API[73]和@mudler_it[74]

贡献和帮助

要帮助该项目,您可以:

•Hacker news post[75]- 如果您喜欢这个项目,请投票支持我们。 •如果您具有技术技能并想为开发做出贡献,请查看开放问题。如果您是新手,可以查看good-first-issue[76]和help-wanted[77]标签。 •如果您没有技术技能,仍然可以帮助改进文档、添加示例或与我们的社区分享您的用户故事,任何帮助和贡献都受到欢迎!

使用方法

请查看入门指南[78]部分。以下是通用的快速指南,帮助您准备好并使用LocalAI。

使用docker-compose是运行LocalAI的最简单方法(如果要在本地构建,请参见构建LocalAI[79]):


          
git clone https://github.com/go-skynet/LocalAI
          

          
cd LocalAI
          

          
# (可选)检出特定的LocalAI标签
          
# git checkout -b build <TAG>
          

          
# 将您的模型复制到models/文件夹中
          
cp your-model.bin models/
          

          
# (可选)编辑.env文件以设置上下文大小和线程数等参数
          
# vim .env
          

          
# 使用docker-compose启动
          
docker-compose up -d --pull always
          
# 或者您可以使用以下命令构建镜像:
          
# docker-compose up -d --build
          

          
# 现在API可以通过localhost:8080访问
          
curl http://localhost:8080/v1/models
          
# {"object":"list","data":[{"id":"your-model.bin","object":"model"}]}
          

          
curl http://localhost:8080/v1/completions -H "Content-Type: application/json" -d '{
          
     "model": "your-model.bin",            
          
     "prompt": "A long time ago in a galaxy far, far away",
          
     "temperature": 0.7
          
   }'
      

示例:使用 GPT4ALL-J 模型


          
# 克隆 LocalAI
          
git clone https://github.com/go-skynet/LocalAI
          

          
cd LocalAI
          

          
# (可选)检出特定的 LocalAI 标签
          
# git checkout -b build <TAG>
          

          
# 下载 gpt4all-j 到 models/
          
wget https://gpt4all.io/models/ggml-gpt4all-j.bin -O models/ggml-gpt4all-j
          

          
# 从示例中复制一个模板到 models/
          
cp -rf prompt-templates/ggml-gpt4all-j.tmpl models/
          

          
# (可选)编辑 .env 文件以设置上下文大小和线程数等参数
          
# vim .env
          

          
# 使用 docker-compose 启动服务
          
docker-compose up -d --pull always
          
# 或者你可以使用以下命令构建镜像:
          
# docker-compose up -d --build
          
# 现在 API 可以通过 localhost:8080 访问
          
curl http://localhost:8080/v1/models
          
# {"object":"list","data":[{"id":"ggml-gpt4all-j","object":"model"}]}
          

          
curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
          
     "model": "ggml-gpt4all-j",
          
     "messages": [{"role": "user", "content": "How are you?"}],
          
     "temperature": 0.9 
          
   }'
          

          
# {"model":"ggml-gpt4all-j","choices":[{"message":{"role":"assistant","content":"I'm doing well, thanks. How about you?"}}]}
      

本地构建

要在本地构建 LocalAI 容器镜像,可以使用 docker


          
# 构建镜像
          
docker build -t localai .
          
docker run localai
      

或者你可以使用 make 构建二进制文件:


        
            

          make build
        
      

请查看我们文档中的构建部分[80]以获取详细说明。

在 Kubernetes 中运行 LocalAI

可以使用 helm 在 Kubernetes 中安装 LocalAI。请参阅安装说明[81]。

支持的 API 端点

请查看支持的 API 端点列表[82],以及如何配置图像生成和音频转录。

常见问题

请查看FAQ[83]部分以获取常见问题列表。

已经使用 LocalAI 运行本地模型的项目

欢迎提交 PR 以将您的项目列入列表!

• Kairos[84]

• k8sgpt[85]

• Spark[86]

• autogpt4all[87]

• Mods[88]

• Flowise[89]

短期路线图

• 模仿 OpenAI API (https://github.com/go-skynet/LocalAI/issues/10) • 二进制发布 (Possible to use it without docker? · Issue #6 · go-skynet/LocalAI · GitHub[90]) • 将我们的 golang 绑定上游到 llama.cpp (Go bindings · Issue #351 · ggerganov/llama.cpp · GitHub[91]) • 上游gpt4all[92]绑定 • 多模型支持 • 有一个 WebUI! • 允许配置模型的默认值。 • 支持嵌入 • 支持使用GitHub - ggerganov/whisper.cpp: Port of OpenAI's Whisper model in C/C++[93]进行音频转录 • GPU/CUDA 支持 (feature: GPU/CUDA support? · Issue #69 · go-skynet/LocalAI · GitHub[94]) • 启用从策划画廊自动下载模型,仅使用免费许可证模型,直接从 WebUI 下载。

许可证

LocalAI 是由Ettore Di Giacinto[95]创建的社区驱动项目。

MIT

作者

Ettore Di Giacinto 和其他人

致谢

感谢社区提供的伟大软件,没有它们,LocalAI无法建立。谢谢!

• llama.cpp[96]

• GitHub - tatsu-lab/stanford_alpaca: Code and documentation to train Stanford's Alpaca models, and generate the data.[97]

•GitHub - cornelk/llama-go: Port of Facebook's LLaMA (Large Language Model Meta AI) in Golang with embedded C/C++[98]提供了最初的想法

• GitHub - antimatter15/alpaca.cpp: Locally run an Instruction-Tuned Chat-Style LLM[99]

• GitHub - EdVince/Stable-Diffusion-NCNN: Stable Diffusion in NCNN with c++, supported txt2img and img2img[100]

• GitHub - ggerganov/whisper.cpp: Port of OpenAI's Whisper model in C/C++[101]

• GitHub - saharNooby/rwkv.cpp: INT4/INT5/INT8 and FP16 inference on CPU for RWKV language model[102]

声明

本文翻译整理自:

https://github.com/wysstartgo/LocalAIhttps://docs.flowiseai.com/embeddings/localai-embeddings

相信如果认真阅读了本文您一定会有收获,喜欢本文的请点赞、收藏、转发,这样将给笔者带来更多的动力!

References

[1] LocalAI Embeddings - FlowiseAI: https://docs.flowiseai.com/embeddings/localai-embeddings
[2] : https://github.com/go-skynet/LocalAI/actions/workflows/test.yml
[3] : https://github.com/go-skynet/LocalAI/actions/workflows/image.yml
[4] : https://discord.gg/uJAeKSAGDy
[5] 模型兼容性表: https://localai.io/model-compatibility/index.html#model-compatibility-table
[6] 请参见构建说明: https://localai.io/basics/build/index.html
[7] Ettore Di Giacinto: https://github.com/mudler/
[8] 示例: https://github.com/go-skynet/LocalAI/tree/master/examples/
[9] ChatGPT OSS 替代品: https://github.com/go-skynet/LocalAI/tree/master/examples/chatbot-ui
[10] 图像生成: https://localai.io/api-endpoints/index.html#image-generation
[11] Telegram 机器人: https://github.com/go-skynet/LocalAI/tree/master/examples/telegram-bot
[12] Flowise: https://github.com/go-skynet/LocalAI/tree/master/examples/flowise
[13] 入门指南: https://localai.io/basics/getting\_started/index.html
[14] 示例: https://github.com/go-skynet/LocalAI/tree/master/examples/
[15] 模型库: https://localai.io/models/
[16] llama.cpp: https://github.com/ggerganov/llama.cpp
[17] GPT4ALL-J: https://github.com/nomic-ai/gpt4all
[18] cerebras-GPT with ggml: https://huggingface.co/lxe/Cerebras-GPT-2.7B-Alpaca-SP-ggml
[19] 这里: https://github.com/ggerganov/llama.cpp#memorydisk-requirements
[20] llama: https://github.com/ggerganov/llama.cpp
[21] binding: https://github.com/go-skynet/go-llama.cpp
[22] gpt4all-llama: https://github.com/nomic-ai/gpt4all
[23] gpt4all-mpt: https://github.com/nomic-ai/gpt4all
[24] gpt4all-j: https://github.com/nomic-ai/gpt4all
[25] falcon: https://github.com/ggerganov/ggml
[26] binding: https://github.com/go-skynet/go-ggml-transformers.cpp
[27] gpt2: https://github.com/ggerganov/ggml
[28] binding: https://github.com/go-skynet/go-ggml-transformers.cpp
[29] dolly: https://github.com/ggerganov/ggml
[30] binding: https://github.com/go-skynet/go-ggml-transformers.cpp
[31] gptj: https://github.com/ggerganov/ggml
[32] binding: https://github.com/go-skynet/go-ggml-transformers.cpp
[33] mpt: https://github.com/ggerganov/ggml
[34] binding: https://github.com/go-skynet/go-ggml-transformers.cpp
[35] replit: https://github.com/ggerganov/ggml
[36] binding: https://github.com/go-skynet/go-ggml-transformers.cpp
[37] gptneox: https://github.com/ggerganov/ggml
[38] binding: https://github.com/go-skynet/go-ggml-transformers.cpp
[39] starcoder: https://github.com/ggerganov/ggml
[40] binding: https://github.com/go-skynet/go-ggml-transformers.cpp
[41] bloomz: https://github.com/NouamaneTazi/bloomz.cpp
[42] binding: https://github.com/go-skynet/bloomz.cpp
[43] rwkv: https://github.com/saharNooby/rwkv.cpp
[44] binding: https://github.com/donomii/go-rw
[45] bert: https://github.com/skeskinen/bert.cpp
[46] binding: https://github.com/go-skynet/go-bert.cpp
[47] whisper: https://github.com/ggerganov/whisper.cpp
[48] stablediffusion: https://github.com/EdVince/Stable-Diffusion-NCNN
[49] binding: https://github.com/mudler/go-stable-diffusion
[50] langchain-huggingface: https://github.com/tmc/langchaingo
[51] Vicuna: https://github.com/ggerganov/llama.cpp/discussions/643#discussioncomment-5533894
[52] Alpaca: https://github.com/ggerganov/llama.cpp#instruction-mode-with-alpaca
[53] GPT4ALL: https://gpt4all.io/
[54] 使用 GPT4All: https://github.com/ggerganov/llama.cpp#using-gpt4all
[55] GPT4ALL-J: https://gpt4all.io/models/ggml-gpt4all-j.bin
[56] Koala: https://bair.berkeley.edu/blog/2023/04/03/koala/
[57] WizardLM: https://github.com/nlpxucan/WizardLM
[58] RWKV: https://github.com/BlinkDL/RWKV-LM
[59] rwkv.cpp: https://github.com/saharNooby/rwkv.cpp
[60] bloom.cpp: https://github.com/NouamaneTazi/bloomz.cpp
[61] Chinese LLaMA / Alpaca: https://github.com/ymcui/Chinese-LLaMA-Alpaca
[62] Vigogne (French): https://github.com/bofenghuang/vigogne
[63] OpenBuddy 🐶 (多语言): https://github.com/OpenBuddy/OpenBuddy
[64] Pygmalion 7B / Metharme 7B: https://github.com/ggerganov/llama.cpp#using-pygmalion-7b--metharme-7b
[65] HuggingFace Inference: https://huggingface.co/inference-api
[66] README: https://github.com/ggerganov/llama.cpp#using-gpt4all
[67] examples: https://github.com/go-skynet/LocalAI/tree/master/examples/rwkv
[68] 发布说明: https://localai.io/basics/news/index.html#-19-06-2023-\_\_v1190\_\_-
[69] 更新日志: https://github.com/go-skynet/LocalAI/releases/tag/v1.19.0
[70] 发布说明: https://localai.io/basics/news/index.html#-06-06-2023-\_\_v1180\_\_-
[71] https://localai.io: https://localai.io/
[72] 专门的新闻栏目: https://localai.io/basics/news/index.html
[73] @LocalAI_API: https://twitter.com/LocalAI\_API
[74] @mudler_it: https://twitter.com/mudler\_it
[75] Hacker news post: https://news.ycombinator.com/item?id=35726934
[76] good-first-issue: https://github.com/go-skynet/LocalAI/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22
[77] help-wanted: https://github.com/go-skynet/LocalAI/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22
[78] 入门指南: https://localai.io/basics/getting\_started/index.html
[79] 构建LocalAI: https://localai.io/basics/build/index.html
[80] 构建部分: https://localai.io/basics/build/index.html
[81] 安装说明: https://localai.io/basics/getting\_started/index.html#run-localai-in-kubernetes
[82] 支持的 API 端点列表: https://localai.io/api-endpoints/index.html
[83] FAQ: https://localai.io/faq/index.html
[84] Kairos: https://github.com/kairos-io/kairos
[85] k8sgpt: https://github.com/k8sgpt-ai/k8sgpt#running-local-models
[86] Spark: https://github.com/cedriking/spark
[87] autogpt4all: https://github.com/aorumbayev/autogpt4all
[88] Mods: https://github.com/charmbracelet/mods
[89] Flowise: https://github.com/FlowiseAI/Flowise
[90] Possible to use it without docker? · Issue #6 · go-skynet/LocalAI · GitHub: https://github.com/go-skynet/LocalAI/issues/6
[91] Go bindings · Issue #351 · ggerganov/llama.cpp · GitHub: https://github.com/ggerganov/llama.cpp/issues/351
[92] gpt4all: https://github.com/go-skynet/LocalAI/issues/85
[93] GitHub - ggerganov/whisper.cpp: Port of OpenAI's Whisper model in C/C++: https://github.com/ggerganov/whisper.cpp
[94] feature: GPU/CUDA support? · Issue #69 · go-skynet/LocalAI · GitHub: https://github.com/go-skynet/LocalAI/issues/69
[95] Ettore Di Giacinto: https://github.com/mudler/
[96] llama.cpp: https://github.com/ggerganov/llama.cpp
[97] GitHub - tatsu-lab/stanford_alpaca: Code and documentation to train Stanford's Alpaca models, and generate the data.: https://github.com/tatsu-lab/stanford\_alpaca
[98] GitHub - cornelk/llama-go: Port of Facebook's LLaMA (Large Language Model Meta AI) in Golang with embedded C/C++: https://github.com/cornelk/llama-go
[99] GitHub - antimatter15/alpaca.cpp: Locally run an Instruction-Tuned Chat-Style LLM: https://github.com/antimatter15/alpaca.cpp
[100] GitHub - EdVince/Stable-Diffusion-NCNN: Stable Diffusion in NCNN with c++, supported txt2img and img2img: https://github.com/EdVince/Stable-Diffusion-NCNN
[101] GitHub - ggerganov/whisper.cpp: Port of OpenAI's Whisper model in C/C++: https://github.com/ggerganov/whisper.cpp
[102] GitHub - saharNooby/rwkv.cpp: INT4/INT5/INT8 and FP16 inference on CPU for RWKV language model: https://github.com/saharNooby/rwkv.cpp

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎边缘渲染的探索与实践 | 第 11 期边缘云主题Meetup
《火山引擎边缘渲染的探索与实践》黄旭能|火山引擎边缘渲染产品经理
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论