• 搭建本地人工智能框架LocalAI


    在这里插入图片描述

    什么是 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    镜像文件比较大(大约 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    在这里插入图片描述

    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" ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    然后执行下面的命令

    # 将 docker-compose.yml 放入当前目录
    
    # 一键启动
    docker-compose up -d
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    从日志可以看到,和 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":""}}
    
    • 1

    因为 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
    • 2
    • 3
    • 4
    • 5
    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
       }'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    返回的结果在 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  
        }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

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

    {  
        "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  
        }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    小结

    虽然老苏用的同一个模型文件,但是感觉上 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/

  • 相关阅读:
    数据库中的中英文术语大全
    锐捷练习-ospf虚链路及rip路由相互引入
    点成分享 | 带你了解移液器的原理及其分类
    Spring Boot 优雅配置yml配置文件定义集合、数组和Map
    VS 常用的快捷键指令
    SpringBoot集成rabbitMq
    EtherCAT主站IgH解析(二)-- 如何将Igh移植到Linux/Windows/RTOS等多操作系统
    C++ Boost.Any 源码剖析与实现
    Redis 常见面试题
    day46
  • 原文地址:https://blog.csdn.net/wbsu2004/article/details/132963171