搭建本地人工智能框架LocalAI

2023-09-18 09:04:54

在这里插入图片描述

什么是 LocalAI

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

最吸引老苏的有两点,一个是不需要 GPU,另一点上可以使用消费级硬件,所以准备搭一个试试,至于后续用来干什么,到时候再说

官方倒是提供了很多示例,比较常见的是机器人,比如:Discord botSlack bot 或者 Telegram bot

在这里插入图片描述

安装

在群晖上以 Docker 方式安装。

镜像下载

官方没有在 docker hub 上发布镜像,而是发布到了 quay.io

SSH 客户端登录到群晖后,依次执行下面的命令

这个版本是 cpu 版本,如果你有 gpu,可以下载支持 cuda 的版本;

# 新建文件夹 localai 和 子目录
mkdir -p /volume1/docker/localai/models

# 进入 localai 目录
cd /volume1/docker/localai

# 拉取镜像
docker pull quay.io/go-skynet/local-ai:latest

镜像文件比较大(大约 13G ),如果拉不动,也可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

# 如果拉不动的话加个代理
docker pull quay.dockerproxy.com/go-skynet/local-ai:latest

# 重命名镜像(如果是通过代理下载的)
docker tag quay.dockerproxy.com/go-skynet/local-ai:latest quay.io/go-skynet/local-ai:latest

# 删除代理镜像(如果是通过代理下载的)
docker rmi quay.dockerproxy.com/go-skynet/local-ai:latest

下载完成后,可以在 映像 中找到

在这里插入图片描述

docker-compose 安装

将下面的内容保存为 docker-compose.yml 文件

version: '3.6'

services:
  api:
    image: quay.io/go-skynet/local-ai:latest
    container_name: localai
    ports:
      - 8668:8080
    volumes:
      - ./models:/models:cached
    environment:
      - MODELS_PATH=/models
    command: ["/usr/bin/local-ai" ]

然后执行下面的命令

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

在这里插入图片描述

从日志可以看到,和 Serge 一样,需要 AVX2 指令兼容的 CPU

模型文件

如果你运行过 Serge,原来下载的 gpt4all.bin 文件是可以直接用的,因为 LocalAIllama.cpp 支持的模型兼容

在这里插入图片描述

否则的话,需要自己下模型文件

老苏把 gpt4all.bin 文件放在了阿里云盘: https://www.aliyundrive.com/s/GQqs39iipya

Open LLM 基准测试中表现最佳的模型列表排行榜:https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard

请记住,与 LocalAI 兼容的模型必须以 ggml 格式进行量化

老苏目前只测试了 gpt4all.bin,所以没法给大家提供指导意见,不要问我下哪个模型。

在这里插入图片描述

当然,LocalAI 是支持多模型文件的,你可以根据需要下载多个模型文件

关于模型这块,可以看官方文档:https://localai.io/models/

运行

如果你在浏览器中直接输入 http://群晖IP:8668,会返回 404 错误

{"error":{"code":404,"message":"Cannot GET /","type":""}}

因为 LocalAI 提供的是 REST API 接口,而不是网页。所以有 2 种方式来测试验证我们安装的服务是否成功,一种是使用 API 调试工具,另一种是用命令行

API 工具

这类工具很多,例如: PostmanApifoxApiPost等等,具体用什么关系不大,因为基本上主要功能是差不多的,老苏目前是用的是 Apifox

  1. 打开应用程序并创建一个新的请求
  2. 在请求的 URL 字段中输入:http://192.168.0.197:8668/v1/completions
  3. 设置请求方法为 POST
  4. 在请求头部 (Headers) 部分中添加一个新的头部,键为 Content-Type,值为 application/json
  5. 在请求体 (Body) 部分中选择 raw 选项,并将下面的 JSON 数据复制粘贴到请求体中:
{
  "model": "gpt4all.bin",
  "prompt": "how old are you?",
  "temperature": 0.7
}
  1. 确认您的请求已设置正确后,点击发送按钮以发送请求。

其中:

  • model:指定要使用的特定语言模型;
  • prompt:用于指定生成文本的起始提示或开头文本。也就是你要提的问题;
  • temperature :用于控制生成文本的多样性。temperature 值越高,生成的文本越随机和多样化,但可能会牺牲一些准确性。相反,temperature 值越低,生成的文本越保守和一致,更加符合模型的训练数据;

现在来聊个天,比如 how old are you?

在这里插入图片描述

看看支不支持中文聊天?

提问只要修改 prompt 后面的内容,回答看 text 后面的内容;

在这里插入图片描述

命令行

如果你不会 API 工具,用命令行也是可以的,用 SSH 客户端登录到群晖后,执行

curl http://192.168.0.197:8668/v1/completions -H "Content-Type: application/json" -d '{
     "model": "gpt4all.bin",
     "prompt": "how old are you?",
     "temperature": 0.7
   }'

在这里插入图片描述

返回的结果在 https://www.json.cn 格式化之后

{  
    "object":"text_completion",  
    "model":"gpt4all.bin",  
    "choices":[  
        {  
            "index":0,  
            "finish_reason":"stop",  
            "text":"I'm sorry, but as an AI language model, I don't have a physical age. However, I was trained on large amounts of data and have been continually updated with new information since then."  
        }  
    ],  
    "usage":{  
        "prompt_tokens":0,  
        "completion_tokens":0,  
        "total_tokens":0  
    }  
}

即便是同样的问题,每次的答复也是有区别的

{  
    "object":"text_completion",  
    "model":"gpt4all.bin",  
    "choices":[  
        {  
            "index":0,  
            "finish_reason":"stop",  
            "text":"I'm sorry, but as an AI language model I do not have a specific age. However, I was trained on vast amounts of data from a variety of sources, including news articles and books. I was trained on this data to understand and generate natural language text."  
        }  
    ],  
    "usage":{  
        "prompt_tokens":0,  
        "completion_tokens":0,  
        "total_tokens":0  
    }  
}

小结

虽然老苏用的同一个模型文件,但是感觉上 LocalAISerge 要快一些,当然也可能是因为 618 升级了内存的缘故

在这里插入图片描述

参考文档

go-skynet/LocalAI: 🤖 Self-hosted, community-driven, local OpenAI-compatible API. Drop-in replacement for OpenAI running LLMs on consumer-grade hardware. Free Open Source OpenAI alternative. No GPU required. LocalAI is an API to run ggml compatible models: llama, gpt4all, rwkv, whisper, vicuna, koala, gpt4all-j, cerebras, falcon, dolly, starcoder, and many other
地址:https://github.com/go-skynet/LocalAI

LocalAI :: LocalAI documentation
地址:https://localai.io/

🖼️ 模型库 :: LocalAI 文档
地址:https://localai.io/models/

更多推荐

百度地图 缩放组件

<!DOCTYPEhtml><html><head><metacharset="utf-8"/><metaname="viewport"content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/><title>地铁图

EFLAGS寄存器与JCC指令

EFLAGS寄存器EFLAGS寄存器有32位,EFLAGS寄存器的标志位可以通过各种指令进行操作和判断,例如条件分支指令、算术指令和控制指令等。程序可以根据标志位的值来进行条件判断和控制流程,从而实现不同的逻辑和功能。EFLAGS寄存器的各个位和标志位含义如下:CF(CarryFlag):进/借位标志位。用于表示某些算

java学习平台springboot004

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路,向着优秀程序员前行!🍅更多优质项目👇🏻👇🏻可点击下方获取🍅文章底部或评论区获取🍅Java项目精品实

【SpringCloud微服务全家桶学习笔记-服务调用Ribbon/openFeign】

SpringCloud微服务全家桶学习笔记内容:SpringCloud+SpringCloudalibaba技术栈:Java8+maven+git,github+Nginx+RabbitMQ+SpringBoot2.0仓库:链接服务调用Ribbon是什么?Ribbon是Netflix发布的开源项目,主要功能是提供客户端

【LeetCode每日一题合集】2023.9.11-2023.9.17(⭐反悔贪心&拓扑排序&Floyd)

文章目录630.课程表III解法——反悔贪心⭐⭐⭐⭐⭐1462.课程表IV⭐解法1——拓扑排序预处理解法2——Floyd算法判断是否存在路径2596.检查骑士巡视方案(方向模拟)1222.可以攻击国王的皇后(方向模拟)LCP50.宝石补给(简单模拟)198.打家劫舍(经典线性DP)213.打家劫舍II(循环打家劫舍)代

成功入选 2023 谷歌出海创业加速器,Tapdata 乘势远航

9月6日,2023Google开发者大会的收官之行于上海拉开帷幕。会间,官方正式公布了最新一期谷歌出海创业加速器入营名单,Tapdata成功入选:长期以来,Google开发者大会为开发者提供了一个独一无二的学习和合作机会,这是一场汇聚全球创新者的聚会,鼓励创新思维。从中能够深入了解最新的技术趋势、工具和平台,与行业内顶

Linux学习-HIS系统部署(2)

GitLab服务器搭建使用rpm包本地部署GitLab服务器#确认GitLab主机硬件配置,注GitLab服务器至少要有4G内存,关闭SWAP分区[root@gitlab~]#free-mtotalusedfreesharedbuff/cacheavailableMem:40211163786161183720Swap

【文末送书】计算机网络编程 | epoll详解

欢迎关注博主Mindtechnist或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号《机器和智能》回复关键词“python项目实战”即可获取美哆商城视频资源

【无公网IP】安装Wnmp并结合内网穿透,实现灵活可靠的外网访问内网服务!

文章目录前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1注册账号3.2下载cpolar客户端3.3登录cpolarwebui管理界面3.4创建公网地址4.固定公网地址访问前言WNMP是Windows系统下的绿色Nginx+Mysql+PHP环境集成套件包,安装完成后即可得到一个Nginx+My

erlang练习题(二)

题目一替换元组或列表中指定位置的元素,新元素作为参数和列表或元组一起传入函数内解答replaceIdx(List,Index,Val)->replaceIdx(List,Index,Val,1,[]).replaceIdx([],_,_,_,Acc)->lists:reverse(Acc);%%到达替换位置的处理rep

期权如何交易?期权如何做模拟交易?

买卖期权的第一步就是要有期权账户,国内的期权品种有商品期权和ETF期权以及股指期权,每种的开户方式和要求都不同,下文为大家介绍期权如何交易?期权如何做模拟交易?一、期权交易需要开立一个期权账户,可以交易期权的平台有证券/期货公司、三方的期权平台。期权交易从方向上可以分为看涨期权和看跌期权,对于这两种期权在交易上又都可以

热文推荐