在AI盛起的当下,各类AI应用不断地出现在人们的视野中,AI正在重塑着各行各业。笔者前前后后调研过无数个AI应用项目,它们都是各自应用场景中的佼佼者。今天介绍的LocalAI 是一个符合 OpenAI API 规范的 REST API,用于本地推理。它允许您在消费级硬件上本地或本地运行 LLMs(不仅仅是)支持多个与 ggml 格式兼容的模型系列,不需要 GPU。
相信如果认真阅读了本文您一定会有收获,喜欢本文的请点赞、收藏、转发,这样将给笔者带来更多的动力!
LocalAI使用示例一览:
这个列表中有很多项目笔者之前都有过专门的文章介绍,这里放出相关链接,感兴趣的同学可自行查看:
LangChain 完整指南:使用大语言模型构建强大的应用程序
另外,LocalAI与Flowise结合还能有更奇妙的用处,比如本地打好Embedding存入向量数据库中来辅助搜索、分类、推荐和AIGC等,可用于打造一个完全智能化的知识库(关于这块有需求的可以找笔者私聊)。
详见LocalAI Embeddings - FlowiseAI[1],大家可以结合笔者之前Flowise的文章一起看。
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]
图像生成 [10]
Telegram 机器人 [11]
Flowise [12]
请参见入门指南[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/LocalAI •https://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