关于人工智能:使用全套开源工具构建-LLM-应用实战在-Dify-调用-Baichuan-开源模型能力

42次阅读

共计 7454 个字符,预计需要花费 19 分钟才能阅读完成。

背景

在当下开源大语言模型炽热的背景下,有很大一部分开发者心愿本地部署开源 LLM,用于钻研 LLM 或者是基于开源 LLM 构建本人的 LLM 利用。笔者也正在尝试通过开源社区的一系列相干优良我的项目,通过本地化部署服务来构建本人的 LLM 利用。那么本地部署一个开源 LLM 来构建一个聊天利用须要哪些筹备呢?

  1. 本地环境的筹备: 因为咱们须要在本地部署一个开源的大模型,所以你须要筹备一个相当硬核的本地环境。硬件上须要一台领有高性能大显存的 NVDIA 显卡、大容量高速内存以及大容量固态硬盘,软件上则须要装置显卡驱动、CUDA、Python 环境。笔者这次抉择跑 Baichuan-chat-13B 模型为例,我的根本配置是 CPU i9-13900K、GTX3090 24GB 双卡、64GB 内存和 2TB 固态硬盘。
  2. 一个大型语言模型(LLM):这是咱们构建 LLM 利用的根底。不同的 LLM 依据预训练的数据和指标工作的不同,其模型构造和学到的常识也不雷同。基于不同模型构建进去的 AI 利用体现也会不一样。你能够通过炽热的 AI 社区 Hugging Face 上找本人感兴趣的开源 LLMs 来进行尝试和能力比照。
  3. 一个 本地部署 LLM 的推理服务 推理服务能够将预训练好的 LLM 模型加载到本地服务器, 并提供模型预测接口, 这样就能够本地化应用 LLM 模型进行各种 NLP 工作, 而不须要依赖云服务。你能够应用一些优良的 GitHub 开源我的项目,这些我的项目对热门的开源 LLM 都做了推理服务的一键部署。知名度比拟高、star 比拟多的有 LocalAI、openLLM 等。
  4. 一个简略易用的“LLM 操作系统”Dify.AI:如果要基于 LLM 的能力构建一个聊天利用,你可能须要学习钻研全套的 LLM 技术栈,比方:不同模型的 API 调用、向量数据库选型、embedding 技术钻研等等。如果你应用开源我的项目 Dify.AI(https://github.com/langgenius/dify),则能够省掉这些钻研学习工作,帮忙你通过可视化的界面即可疾速创立基于不同 LLM 能力的 AI 利用。 Dify 最近的版本新增了对开源 LLMs 的反对,对托管在 HuggingFace 和 Replicate 上所有的模型都能疾速调用和切换应用,同时反对本地部署形式可能基于 openLLM 和 Xorbits inference 推理服务来实现 AI 利用的构建。

本文笔者将尝试应用 开源的 LLMOps 平台 Dify.AI + 开源的推理服务 Xinference + 开源模型 baichuan-chat-13B 为例,手把手实操教你在 windows 环境下,应用全套开源工具产品来构建一个 LLM 聊天利用。话不多说咱们间接动工。

环境筹备

根本的 conda 和 Python 个别应该都有了。不过本文还是从零开始介绍环境配置吧。

配置 python 环境

个别状况下倡议应用 conda 进行 python 版本治理。先依据 conda 官网文档装置 conda。而后用 conda 初始化 Python 3.11 环境:

conda create --name python-3-11 python=3.11
conda activate python-3-11

装置 CUDA

举荐间接从官网装置。我这是 Windows 11 就选下图版本。

依据疏导装置完,关上 NVDIA 控制面板 -> 零碎信息 看到装上了。

WSL2 筹备

因为 Dify 的 docker 部署举荐应用 WSL2 环境。所以当初先装置 WSL2。参考微软官网指引。

  • 第一步,管理员身份运行 CMD

  • 第二步,在 CMD 中用指令装置

    • wsl --install

        后果看到了反对的各种零碎版本

    • 实用于 Linux 的 Windows 子系统已装置。以下是可装置的无效散发的列表。请应用“wsl --install -d < 散发 >”装置。NAME                                   FRIENDLY NAME
      Ubuntu                                 Ubuntu
      Debian                                 Debian GNU/Linux
      kali-linux                             Kali Linux Rolling
      Ubuntu-18.04                           Ubuntu 18.04 LTS
      Ubuntu-20.04                           Ubuntu 20.04 LTS
      Ubuntu-22.04                           Ubuntu 22.04 LTS
      OracleLinux_7_9                        Oracle Linux 7.9
      OracleLinux_8_7                        Oracle Linux 8.7
      OracleLinux_9_1                        Oracle Linux 9.1
      openSUSE-Leap-15.5                     openSUSE Leap 15.5
      SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
      SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
      openSUSE-Tumbleweed                    openSUSE Tumbleweed

 我应用抉择装置了默认的 Ubuntu 版本:

 wsl --install -d Ubuntu

之后就能够在 CMD 中应用 wsl命令进入 Ubuntu 了。

  • 第三步,装置 Docker Desktop

      去 Docker 官网文档下载 Docker Desktop。装置时留神勾上 Use WSL 2 instead of Hyper-V 选项。装置实现后重启电脑。通过 CMD 查看是否失常装置好。

    • wsl -l --verbose
      
       NAME                   STATE           VERSION
      * Ubuntu                 Running         2
        docker-desktop         Running         2
         
    能够看到 WSL 中 Ubuntu 和 Docker 都运行起来了,并且确认是 WSL2 版本。
  • 第四步,为 WSL 配置代理

    因为每次重启后 WSL 的 ip 地址都会变更,所以咱们能够编写一个脚本来解决。第 4 行改为你本人的端口号。

    • #!/bin/sh
      hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2}')
      wslip=$(hostname -I | awk '{print $1}')
      port=7890
       
      PROXY_HTTP="http://${hostip}:${port}"
       
      set_proxy(){export http_proxy="${PROXY_HTTP}"
        export HTTP_PROXY="${PROXY_HTTP}"
       
        export https_proxy="${PROXY_HTTP}"
        export HTTPS_proxy="${PROXY_HTTP}"
       
        export ALL_PROXY="${PROXY_SOCKS5}"
        export all_proxy=${PROXY_SOCKS5}
       
        git config --global http.https://github.com.proxy ${PROXY_HTTP}
        git config --global https.https://github.com.proxy ${PROXY_HTTP}
       
        echo "Proxy has been opened."
      }
       
      unset_proxy(){
        unset http_proxy
        unset HTTP_PROXY
        unset https_proxy
        unset HTTPS_PROXY
        unset ALL_PROXY
        unset all_proxy
        git config --global --unset http.https://github.com.proxy
        git config --global --unset https.https://github.com.proxy
       
        echo "Proxy has been closed."
      }
       
      test_setting(){echo "Host IP:" ${hostip}
        echo "WSL IP:" ${wslip}
        echo "Try to connect to Google..."
        resp=$(curl -I -s --connect-timeout 5 -m 5 -w "%{http_code}" -o /dev/null www.google.com)
        if [${resp} = 200 ]; then
          echo "Proxy setup succeeded!"
        else
          echo "Proxy setup failed!"
        fi
      }
       
      if ["$1" = "set"]
      then
        set_proxy
       
      elif ["$1" = "unset"]
      then
        unset_proxy
       
      elif ["$1" = "test"]
      then
        test_setting
      else
        echo "Unsupported arguments."
      fi

        能够批改~/.bashrc 方便使用命令:

    • alias proxy="source /path/to/proxy.sh"

        具体能够参考了这个博客(https://www.cnblogs.com/tuilk/p/16287472.html)

  • 第五步,进入 Ubuntu 装置 conda 配置 python

      和后面的环境筹备一样,参照官网文档装置 conda 配置 python,不过是装置 linux 版本。

  • 第六步,装置 WSL 的 CUDA

      进入官网,抉择 WSL-Ubuntu 版本,依照指引应用命令行装置。

      批改 ~/.bashrc 将 CUDA 增加至环境变量:

    • export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64
  • 第七步,装置 PyTorch

      进入 PyTorch 官网,依照环境装置 PyTorch。

这样环境筹备总算实现了。

部署推理服务 Xinference

依据 Dify 的部署文档,Xinference 反对的模型还挺多的。这次就选 Xinference 尝试下 baichuan-chat-3B 吧。

Xorbits inference 是一个弱小且通用的分布式推理框架,旨在为大型语言模型、语音辨认模型和多模态模型提供服务,甚至能够在笔记本电脑上应用。它反对多种与 GGML 兼容的模型, 如 ChatGLM, Baichuan, Whisper, Vicuna, Orca 等。Dify 反对以本地部署的形式接入 Xinference 部署的大型语言模型推理和 embedding 能力。

装置 Xinfernece

在 WSL 中执行如下命令:

$ pip install "xinference"

下面的命令会装置 Xinference 用于推理的根底依赖。Xinference 还反对用 ggml 推理PyTorch 推理,须要装如下的依赖:

$ pip install "xinference[ggml]"
$ pip install "xinference[pytorch]"
$ pip install "xinference[all]"

启动 Xinference 并下载部署 baichuan-chat-3B 模型

在 WSL 中执行上面的命令:

$ xinference -H 0.0.0.0

Xinference 默认会在本地启动一个 worker,端点为:http://127.0.0.1:9997,端口默认为 9997。默认只可本机拜访,配置了 -H 0.0.0.0,非本地客户端可任意拜访。如需进一步批改 host 或 port,可查看 xinference 的帮忙信息:xinference --help

2023-08-25 18:08:31,204 xinference   27505 INFO     Xinference successfully started. Endpoint: http://0.0.0.0:9997
2023-08-25 18:08:31,204 xinference.core.supervisor 27505 INFO     Worker 0.0.0.0:53860 has been added successfully
2023-08-25 18:08:31,205 xinference.deploy.worker 27505 INFO     Xinference worker successfully started.

在浏览器中关上: http://localhost:9997,抉择 baichuan-chat,pytorch,13B,4bit,点击 create 部署。

或者应用 CLI 部署:

xinference launch --model-name baichuan-chat --model-format pytorch --size-in-billions 13 --quantization 4

因为不同模型在不同硬件平台兼容性不同,请查看 Xinference 内置模型 确定创立的模型是否反对以后硬件平台。

应用 Xinference 治理模型

要查看部署好的所有模型,在命令行中,执行上面的命令:

$ xinference list 

会显示相似上面的信息:

UID                                   Type    Name           Format      Size (in billions)  Quantization
------------------------------------  ------  -------------  --------  --------------------  --------------
0db1e250-4330-11ee-b9ef-00155da30d2d  LLM     baichuan-chat  pytorch                     13  4-bit

0db1e250-4330-11ee-b9ef-00155da30d2d 就是方才部署的模型的 uid。

部署 Dify.AI

次要流程参考官网部署文档。

Clone Dify

Clone Dify 源代码至本地

git clone https://github.com/langgenius/dify.git

Start Dify

进入 dify 源代码的 docker 目录,执行一键启动命令:

cd dify/docker
docker compose up -d

部署后果:

[+] Running 7/7
 ✔ Container docker-weaviate-1  Running                                                0.0s 
 ✔ Container docker-web-1       Running                                                0.0s 
 ✔ Container docker-redis-1     Running                                                0.0s 
 ✔ Container docker-db-1        Running                                                0.0s 
 ✔ Container docker-worker-1    Running                                                0.0s 
 ✔ Container docker-api-1       Running                                                0.0s 
 ✔ Container docker-nginx-1     Started                                                0.9s 

最初查看是否所有容器都失常运行:

docker compose ps

运行状态:

NAME                IMAGE                              COMMAND                  SERVICE             CREATED             STATUS              PORTS
docker-api-1        langgenius/dify-api:0.3.16         "/bin/bash /entrypoi…"   api                 24 hours ago        Up 3 hours          5001/tcp
docker-db-1         postgres:15-alpine                 "docker-entrypoint.s…"   db                  33 hours ago        Up 3 hours          0.0.0.0:5432->5432/tcp
docker-nginx-1      nginx:latest                       "/docker-entrypoint.…"   nginx               24 hours ago        Up 4 minutes        0.0.0.0:80->80/tcp
docker-redis-1      redis:6-alpine                     "docker-entrypoint.s…"   redis               33 hours ago        Up 3 hours          6379/tcp
docker-weaviate-1   semitechnologies/weaviate:1.18.4   "/bin/weaviate --hos…"   weaviate            33 hours ago        Up 3 hours          
docker-web-1        langgenius/dify-web:0.3.16         "/bin/sh ./entrypoin…"   web                 33 hours ago        Up 3 hours          3000/tcp
docker-worker-1     langgenius/dify-api:0.3.16         "/bin/bash /entrypoi…"   worker              33 hours ago        Up 3 hours          5001/tcp

包含 3 个业务服务 api / worker / web,以及 4 个根底组件 weaviate / db / redis / nginx

Docker 启动胜利后,在浏览器中拜访:http://127.0.0.1/。设置过明码,登陆后,会进入利用列表页。

至此,胜利应用 Docker 部署了 Dify 社区版。

在 Dify 接入 Xinference

配置模型供应商

设置 > 模型供应商 > Xinference 中填入模型信息:

  • Model Name 是你本人起给模型部署的名字。
  • Server URL 是 xinference 的 end point 地址。
  • Model UID 则是通过 xinference list获取到的部署的模型的 UID

须要留神的是 Sever Url 不能用 localhost。因为如果填 localhost,拜访的是 docker 里的 localhost,会导致拜访失败。解决方案是将 Sever Url 改成局域网 ip。

而 WSL 环境下则须要应用 WSL 的 IP 地址。

在 WSL 中应用命令获取:

hostname -I
172.31.157.121

应用 baichuan-chat

创立利用,就能够在利用中应用上一步配置的 baichuan-chat-3B 模型啦。在 Dify 的提醒词编排界面,抉择 baichuan-chat 模型,设计你的利用提醒词(prompt),即可公布一个可拜访的 AI 利用。

以上,就是本地部署 Dify 接入 Xinference 部署的 baichuan-chat 的全过程。至此,咱们基于 baichuan-chat-13B 的一个根本的聊天利用就根本实现了。

后记

当然,对于一个生产级别的 LLM 利用来说,只是实现大模型的接入和推理、聊天交互是远远不够。咱们还须要针对性的对 LLM 进行 Prompt 的调优、增加公有数据作为上下文,亦或者是对 LLM 自身进行微调等工作,这须要长期的迭代和优化能力使得 LLM 利用体现越来越好。Dify.AI 作为一个中间件工具平台,提供了一个残缺 LLM App 技术栈的可视化的操作系统。实现了以上的根底服务部署后,后续的利用迭代和改良都能够基于 Dify 来实现,使得 LLM 利用的构建和治理变得更加简略和易用,在业务数据的解决上间接上传即可主动实现荡涤解决,后续也将提供数据标注和改良的服务,甚至你的业务团队都能够参加合作。

目前 LLM 的倒退和利用落地还处于十分晚期的阶段,置信在不久后,无论是 LLM 的能力开释,还是基于 LLM 之上的各个工具能力的不断完善,都会一直升高开发者摸索 LLM 能力的门槛,让更多丰盛场景的 AI 利用涌现。

正文完
 0