前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LocalAI——一款可在消费级硬件上本地运行 LLMs的AI应用

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

作者头像
山行AI
发布2023-08-10 13:30:44
4.8K0
发布2023-08-10 13:30:44
举报
文章被收录于专栏:山行AI山行AI

前言

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

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

LocalAI使用示例一览:

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

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

Auto-GPT知多少

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

基于LangChain的优秀项目资源库

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

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

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

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

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]

图像生成[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,并且还需要提供与模型相关联的分词器:

代码语言:javascript
复制
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]):

代码语言:javascript
复制
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 模型

代码语言:javascript
复制
# 克隆 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

代码语言:javascript
复制
# 构建镜像
docker build -t localai .
docker run localai

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山行AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • LocalAI介绍
  • 可用的模型
    • 硬件要求
      • 模型兼容性表格
        • RWKV
          • 新闻
            • 贡献和帮助
              • 使用方法
                • 示例:使用 GPT4ALL-J 模型
                • 本地构建
                • 在 Kubernetes 中运行 LocalAI
              • 支持的 API 端点
                • 常见问题
                  • 已经使用 LocalAI 运行本地模型的项目
                    • 短期路线图
                      • 许可证
                        • 作者
                          • 致谢
                            • References
                        • 声明
                        相关产品与服务
                        容器服务
                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档