Dify 与 Xinference 最佳组合 GPU 环境部署全流程

背景介绍

在前一篇文章 RAG 项目对比 之后,确定 Dify 目前最合适的 RAG 框架。本次就尝试在本地 GPU 设备上部署 Dify 服务。

Dify 是将模型的加载独立出去的,因此需要选择合适的模型加载框架。调研一番之后选择了 Xinference,理由如下:

  • 支持多种类型的模型,包括 LLM,Embedding, Rerank, Audio 等多种业务场景的模型需求,一个框架全搞定;
  • 方便的模型管理能力,提供可视化页面快速部署模型
  • 支持直接从 ModelScope 下载模型,避免 huggingface 被墙的问题;

本文是 Dify 与 Xinference 最佳组合的 GPU 设备部署流程。为了充分利用 nvidia GPU 的能力,需要先安装显卡驱动,CUDA 和 CuDNN,这部分网上的教程比较多了,大家可以自行搜索参考安装,安装时需要注意版本需要与自己的 GPU 显卡版本匹配。

Dify 部署

参考 Dify 官方文档 进行安装。

首先需要下载 Dify 对应的代码:

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

之后创建环境变量文件 .env, 根据需要进行修改,之后就可以基于 docker compose 启动:

cd dify/docker
cp .env.example .env
docker compose up -d

默认访问 http:// 应该就可以看到 Dify 的页面。

docker 镜像问题

实际执行镜像拉取时发现,Docker hub 因为监管的原因已经无法访问了。为了解决这个问题,目前相对可行的方案:

  1. 利用一些目前可用的镜像服务,当前(2024-7-11)可用的是 public-image-mirror,通过修改本地的镜像下载地址进行加速;
  2. 利用 Github Action 将镜像拉取至个人阿里云的的私有镜像仓库,可以参考 教程

实际为了简单直接采用方案 1,在本地文件 /etc/docker/daemon.json 中添加:

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ]
}

如果上面的地址不可用,可以尝试另一个测试可用的地址:

{
  "registry-mirrors": [
    "https://docker.anyhub.us.kg"
  ]
}

修改之后执行下面命令重启 docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

接下来就可以正常拉取镜像了。

Xinference 部署

XInference 的部署也选择基于 docker 部署,可以参考 XInference 部署,实际使用的部署命令为:

docker run -e XINFERENCE_MODEL_SRC=modelscope -v <local model path>:/models -e XINFERENCE_HOME=/models -p 9998:9997 --gpus all registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:latest xinference-local -H 0.0.0.0

各位使用时将上面命令行中的 <local model path> 替换为期望服务器上模型存储的路径即可

上面的命令利用 XINFERENCE_MODEL_SRC=modelscope 指定了模型最终是从 modelscope 下载的,这样国内下载模型镜像的速度比较快。

上面的命令会将 docker 中的 9997 端口映射至本地的 9998 端口,部署完成后访问 http://<server ip>:9998/ui 就可以看到 XInference 可视化页面,有需要可以调整服务器上实际占用的端口。

docker GPU 不可用

上面的命令实际执行时会报错 docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]., docker 目前是不能直接使用 GPU 设备的。

此时需要参考 Nvidia 文档 安装 nvidia-container-toolkit

首先需要先补全 apt-get 下载源:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

接下来更新源,安装对应的包:

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

安装完成之后修改 docker 配置文件 /etc/docker/daemon.json

{
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "path": "nvidia-container-runtime",
      "runtimeArgs": []
    }
  }
}

之后执行 sudo systemctl restart docker 重启 docker。

此时再执行上面的 docker run 命令去使用 GPU 设备就没问题了。

Dify 模型配置

上述服务配置好之后,就可以在 Xinference 下载所需的模型,XInference 启动后实际会占用服务器上的 9998。因此访问 http://<server ip>:9998/ui 就可以进入可视化页面下载所需的模型;

在 Xinference 上下载和运行所需的模型后可以返回 Dify 可视化页面,在 Dify 的设置页中配置对应的模型,对应的页面如下所示:

请添加图片描述

RAG 一般情况下需要配置上 LLM, Text Embedding 和 Rerank 模型。配置完成后就可以自由玩耍了。

总结

本文是实际部署 Dify + Xinference 组合的完整流程,实际上如果 docker 可用的话,整体的流程还是比较丝滑的。期望给后面折腾 Dify 部署的一些帮助,减少重复的踩坑。

  • 34
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
dify是一个开源的Python库,用于快速开发机器学习模型和部署机器学习服务。它提供了一系列的工具和接口,帮助开发者在机器学习项目中更高效地进行数据处理、特征工程、模型训练和模型部署等任务。 dify的主要特点包括: 1. 简单易用:dify提供了简洁的API和丰富的功能,使得开发者可以快速上手并进行高效的开发。 2. 模块化设计:dify采用模块化的设计,每个模块都有清晰的功能和接口,可以根据需求选择性地使用。 3. 数据处理和特征工程:dify提供了丰富的数据处理和特征工程工具,包括数据清洗、特征选择、特征变换等功能,帮助开发者更好地准备数据。 4. 模型训练和评估:dify支持多种常见的机器学习算法,并提供了模型训练和评估的接口,方便开发者进行模型选择和性能评估。 5. 模型部署和服务化:dify支持将训练好的模型部署为API服务,方便其他应用程序进行调用和集成。 如果你想开发新模块,可以按照以下步骤进行: 1. 确定模块的功能和接口:明确你的模块要解决的问题,并设计好相应的功能和接口。 2. 实现模块代码:使用Python编写你的模块代码,可以借助dify提供的工具和接口来简化开发过程。 3. 测试和调试:对你的模块进行测试和调试,确保其功能正常并符合预期。 4. 文档编写:编写清晰的文档,介绍你的模块的功能、使用方法和示例代码等。 5. 提交和分享:将你的模块提交到dify的开源社区,与其他开发者分享你的成果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易迟

高质量内容创作不易,支持下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值