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 部署的一些帮助,减少重复的踩坑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

易我分区大师18.8.0更新:两大功能改进

近日&#xff0c;易我分区大师18.8.0更新上线。此次更新重点改进了系统克隆功能&#xff0c;支持从第二块系统盘&#xff08;从盘&#xff09;克隆系统&#xff1b;同时&#xff0c;软件支持将分区的文件系统格式从FAT转换成exFAT。 01、系统克隆 系统克隆功能旨在帮助用户在…

pinia学习

conuter.ts <template><div><!-- 显示当前的计数 --><p>Count: {{ count }}</<!-- 显示计算的双倍计数 --><p>Double Count: {{ doubleCount }}</p><!-- 点击按钮以增加计数 --><button click"increment">…

基于红黑树对map和set的封装

前言 前面我们已经对红黑树做了介绍和实现&#xff0c;本期我们来对红黑树进一步改造&#xff0c;然后基于改造后的红黑树封装出map和set&#xff01; 本期内容介绍 • 红黑树的改造 • 红黑树的迭代器实现 • map的封装 • set的封装 • 全部源码 ● 红黑树的改造 我们目前…

未来互联网的新篇章:深度解析Facebook的技术与战略

随着科技的飞速发展和社会的不断变迁&#xff0c;互联网作为全球信息交流的重要平台&#xff0c;正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅是人们沟通、分享和互动的重要场所&#xff0c;更是科技创新和数字化进程的推动者。本文…

音视频开发—FFmpeg 从MP4文件中抽取视频H264数据

文章目录 MP4文件存放H264数据方式MP4 文件结构概述H.264 数据在 MP4 中的存储1. ftyp 盒子2. moov 盒子3. mdat 盒子 H.264 数据在 stsd 盒子中的存储&#xff08;AVC1&#xff09;AVC1与Annex-B 格式&#xff08;裸 H.264 流&#xff09;的区别 从MP4文件中提取H264裸流步骤&…

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…

怎么压缩视频?推荐7款必备视频压缩软件免费版(强烈建议收藏)

如今&#xff0c;视频内容日益丰富&#xff0c;并占据了许多人的日常娱乐和工作生活。然而&#xff0c;随着高清和超高清视频的普及&#xff0c;视频文件的体积也越来越大&#xff0c;给存储和传输带来了挑战。因此&#xff0c;学会如何压缩视频文件成为了许多人的需求之一。本…

关于锂电池的充电过程

锂电池的充电阶段大概可以分为四个阶段&#xff1a;涓流充电、恒流充电、恒压充电以及充电终止。 涓流充电&#xff1a;这是充电过程的第一阶段&#xff0c;主要用于对完全放电的电池单元进行预充&#xff08;恢复性充电&#xff09;。当电池电压低于大概3V时&#xff0c;采用最…

【学习css1】flex布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…

PaintsUndo - 一张照片一键生成绘画过程视频 本地一键整合包下载

这就是ControlNet作者张吕敏大佬的新作&#xff0c;PaintsUndo。只要你有一张图片&#xff0c;PaintsUndo 就能让它变成完整的绘画过程视频。这科技&#xff0c;绝了。 你有没有想过&#xff0c;一张静态图片也能变成一个绘画教程? PaintsUndo 就是这么神奇。你只需要提供一…

通过手机供网、可修改WIFI_MAC的网络设备

一、修改WIFI mac&#xff08;bssid&#xff09; 取一根网线&#xff0c;一头连着设备黄色网口、一头连着电脑按住设备reset按键&#xff0c;插入电源线&#xff0c;观察到蓝灯闪烁后再松开reset按键 打开电脑浏览器&#xff0c;进入192.168.1.1&#xff0c;选择“MAC 地址修改…

【Spring Boot】Spring原理:Bean的作用域和生命周期

目录 Spring原理一. 知识回顾1.1 回顾Spring IOC1.2 回顾Spring DI1.3 回顾如何获取对象 二. Bean的作用域三. Bean的生命周期 Spring原理 一. 知识回顾 在之前IOC/DI的学习中我们也用到了Bean对象&#xff0c;现在先来回顾一下IOC/DI的知识吧&#xff01; 首先Spring IOC&am…

可视化学习:如何用WebGL绘制3D物体

在之前的文章中&#xff0c;我们使用WebGL绘制了很多二维的图形和图像&#xff0c;在学习2D绘图的时候&#xff0c;我们提过很多次关于GPU的高效渲染&#xff0c;但是2D图形的绘制只展示了WebGL部分的能力&#xff0c;WebGL更强大的地方在于&#xff0c;它可以绘制各种3D图形&a…

C语言之数据在内存中的存储(2),浮点数在内存中的存储

目录 前言 一、引例 二、浮点型在内存中的存储 三、浮点数在内存中的存和取过程 1.浮点数的存储过程 2.浮点数的取过程 四、引例解析 总结 前言 想知道浮点数在内存中是如何存储的吗&#xff0c;本文就告诉你答案&#xff0c;虽然一般情况题目还是面试涉及到浮点数在内…

新华三H3CNE网络工程师认证—ACL使用场景

ACL主要用于实现流量的过滤&#xff0c;业务中网络的需求不止局限于能够连同。 一、过略工具 你的公司当中有研发部门&#xff0c;包括有财务部门&#xff0c;财务部门的访问是要做到控制的&#xff0c;防止被攻击。 这种的过滤方法为&#xff0c;在设备侧可以基于访问需求来…

AI算力发展现状与趋势分析

综合算力发展现状与趋势分析 在数字经济的疾速推动下&#xff0c;综合算力作为驱动各类应用和服务的新型生产力&#xff0c;其价值日益凸显。我们深入探讨了综合算力的定义、重要性以及当前发展状况&#xff1b;并从算力形态、运力性能和存储技术等角度&#xff0c;预见了其发展…

基于Java技术的校友社交系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果你对校友社交系统感兴趣或者有相关需求&#xff0c;可以私信联系我。 开发语言 Java 数据库 MySQL 技术 Java技术SpringBoot框架 工具 IDEA/Eclipse、Navicat、Maven 系统展示 首页 校友会信息界面 校友活动…

Sqli-labs 3

1.按照路径http://localhost/sqli-labs/sqli-labs-master/Less-3/进入 2.判断注入类型----字符型 Payload&#xff1a;?id1’) and 11-- 注&#xff1a;根据报错提示的语法错误&#xff0c;在第一行中使用接近’union select 1,2,3--’)的正确语法 3.判断注入点&#xff1a;…

【Linux】vim详解

1.什么是vi/vim? 简单来说&#xff0c;vi是老式的文本编辑器&#xff0c;不过功能已经很齐全了&#xff0c;但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具&#xff0c;就连 vim的官方网站&#xff08; http://www.vim.org&#xff09;自己也说vim是一…

区块链项目全球成功指南:全面覆盖的媒体宣发策略与实践

随着区块链技术的迅速普及和发展&#xff0c;全球范围内对区块链项目的关注度不断提升。为了在国际市场上取得成功&#xff0c;区块链项目需要通过有效的媒体宣传策略来提高知名度&#xff0c;吸引投资&#xff0c;并建立强大的社区支持。本文将详细介绍区块链项目在海外媒体宣…