当前位置: 首页 > news >正文

【大模型实战篇】Mac本地部署RAGFlow的踩坑史

1. 题外话

        最近一篇文章还是在11月30日写的,好长时间没有打卡了。最近工作上的事情特别多,主要聚焦在大模型的预训练、微调和RAG两个方面。主要用到的框架是Megatron-DeepSpeed,后续会带来一些分享。今天的文章主要聚焦在RAG。

        近期调研了一系列开源的RAG框架(约20多个开源项目),相对来说,RAGFlow【1】更贴合我的需求,因此就花了一些时间去研究,本文分享下在Mac系统本地化部署的实践。通过本地化部署和使用,能够更好的帮助你分析其中的一些能力以及理解代码。不过话说回来,虽然RAGFlow的demo使用还是挺可以的,但开源项目的代码质量和文档质量不得不令人吐槽,希望该项目的作者能够重视起来。

2. Mac系统部署   

       我们采用从源码部署的模式【2】。由于0.15.1似乎对mac的支持不够,因此回退到0.14.1版本。后续的安装是基于0.14.1版本进行,这个需要说明一下。

        这里说一下我本地的mac系统信息:

芯片:Apple M2 Pro

内存:16G

macOS: Ventura 13.4

2.1 资源要求

  • CPU ≥ 4 cores
  • RAM ≥ 16 GB
  • Disk ≥ 50 GB
  • Docker ≥ 24.0.0 & Docker Compose ≥ v2.26.1

Mac查看cpu信息

> sysctl -a | grep machdep.cpu

machdep.cpu.cores_per_package: 10

machdep.cpu.core_count: 10

machdep.cpu.logical_per_package: 10

machdep.cpu.thread_count: 10

machdep.cpu.brand_string: Apple M2 Pro

2.2 安装pipx

> python -m pip install --user pipx

配置启动:

> python -m site --user-base

> nano ~/.zshrc

添加以下指令到.zshrc:

export PATH="/path/to/user_base/bin:$PATH"

生效:

> source ~/.zshrc

接下来可以使用pipx:

> pipx

usage: pipx [-h] [--quiet] [--verbose] [--global] [--version]

            {install,install-all,uninject,inject,pin,unpin,upgrade,upgrade-all,upgrade-shared,uninstall,uninstall-all,reinstall,reinstall-all,list,interpreter,run,runpip,ensurepath,environment,completions}

            ...

Install and execute apps from Python packages.

Binaries can either be installed globally into isolated Virtual Environments

or run directly in a temporary Virtual Environment.

2.3 安装poetry

pipx install poetry 

配置:

export POETRY_VIRTUALENVS_CREATE=true POETRY_VIRTUALENVS_IN_PROJECT=true

2.4 安装依赖包

瘦身版:

~/.local/bin/poetry install --sync --no-root

完整版:

~/.local/bin/poetry install --sync --no-root --with full

注意:此时安装会报xgboost的安装错误,原因是xgboost 包的版本 1.5.0 不支持 PEP 517 构建标准,而 Poetry 默认使用 PEP 517 来处理依赖包的安装【3】。

解决方案为编辑 pyproject.toml 文件,在 [tool.poetry.dependencies] 部分,调整 xgboost 的版本范围,xgboost = "^1.6.0", 然后保存修改。

使用以下命令重新生成 poetry.lock 文件:

~/.local/bin/poetry lock

根据 pyproject.toml 文件的依赖定义,更新或重新生成 poetry.lock 文件。完成后再次执行

~/.local/bin/poetry install --sync --no-root

安装依赖顺利完成。

2.5 启动第三方服务 

使用 Docker Compose 启动 ‘base’ 服务(MinIO、Elasticsearch、Redis 和 MySQL)

docker compose -f docker/docker-compose-base.yml up -d

这里也遇到docker compose的问题,可能需要涉及到重新安装,看你的版本,如果是高版本,则需要安装一个docker-compose的extension包,否则安装docker-compose。确保你的docker-compose版本在v2.26.1及以上。

另外,可以添加docker的国内加速镜像,能够顺利一些。

2.6 启动 RAGFlow 后端服务 

在 docker/entrypoint.sh 文件中注释掉 nginx 这一行。

# /usr/sbin/nginx

回退路径到ragflow目录,激活 Python 虚拟环境:

> source .venv/bin/activate

> export PYTHONPATH=$(pwd)

如果无法访问 HuggingFace,可以设置 HF_ENDPOINT 环境变量以使用镜像站点:

推荐一个 huggingface 的镜像站:https://hf-mirror.com/

export HF_ENDPOINT=https://hf-mirror.com

在ragflow路径下运行 entrypoint.sh 脚本来启动后端服务:

bash docker/entrypoint.sh

这里直接使用源码,可能会报错路径问题, /ragflow/docker/service_conf.yaml.template: No such file or directory。 需要调整一下路径【3】。具体如下:

#!/bin/bash# replace env variables in the service_conf.yaml file
rm -rf ./conf/service_conf.yaml
while IFS= read -r line || [[ -n "$line" ]]; do# Use eval to interpret the variable with default valueseval "echo \"$line\"" >> ./conf/service_conf.yaml
done < ./docker/service_conf.yaml.template# unset http proxy which maybe set by docker daemon
export http_proxy=""; export https_proxy=""; export no_proxy=""; export HTTP_PROXY=""; export HTTPS_PROXY=""; export NO_PROXY=""#/usr/sbin/nginxexport LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/PY=python3
if [[ -z "$WS" || $WS -lt 1 ]]; thenWS=1
fifunction task_exe(){while [ 1 -eq 1 ];do$PY rag/svr/task_executor.py $1;done
}for ((i=0;i<WS;i++))
dotask_exe  $i &
donewhile [ 1 -eq 1 ];do$PY api/ragflow_server.py
donewait;

另外启动过程中,可能会报一些module not found的错误,python依赖包罗列如下:

beartype, pycryptodomex, pdfplumber, polars, datrie, hanziconv, roman_numbers, cn2an strenum, tiktoken, xxhash, elasticsearch_dsl, valkey, flask_login, word2number, infinity

如果启动成功,可以看待下述的信息:

2.6 启动 RAGFlow 前端服务 

安装前端依赖项:

注:需要安装node

> cd web

> npm install --force

 安装依赖的过程又有点麻烦,出现很多次timeout

配置一下镜像:

npm config set registry https://registry.npmmirror.com/

在 .umirc.ts 中将 proxy.target 更新为 http://127.0.0.1:9380

vim .umirc.ts

启动 RAGFlow 前端服务:

npm run dev

3. 系统界面展示

4. 服务关闭

开发完成后停止 RAGFlow 服务 

停止 RAGFlow 前端服务:

pkill npm 

停止 RAGFlow 后端服务:

pkill -f “docker/entrypoint.sh”

5. 参考材料

【1】https://github.com/infiniflow/ragflow

【2】Launch the RAGFlow Service from Source

【3】源码部署RAGFlow-0.14.1

相关文章:

【大模型实战篇】Mac本地部署RAGFlow的踩坑史

1. 题外话 最近一篇文章还是在11月30日写的&#xff0c;好长时间没有打卡了。最近工作上的事情特别多&#xff0c;主要聚焦在大模型的预训练、微调和RAG两个方面。主要用到的框架是Megatron-DeepSpeed&#xff0c;后续会带来一些分享。今天的文章主要聚焦在RAG。 近期调研了一系…...

iOS 修改图片颜色

需求中会遇到这种情况&#xff0c;就是我们需要的图片是已经有的 但是图片的颜色不符合我们的需求&#xff0c;但是又不想再切新的图片了&#xff0c;这个时候&#xff0c;我们可以使用代码的方式修改图片的颜色&#xff0c;达到同样的效果 关键代码就是 [image imageWithRend…...

OceanBase到MySQL实时同步方案

概述 本方案基于OceanBase Binlog服务&#xff0c;采用数据库实时复制软件Beedup订阅捕获OceanBase数据库的Binlog事件&#xff0c;复制软件将Binlog事件还原为MySQL支持的DML或DDL&#xff0c;然后交由MySQL数据库执行。 配置Binlog任务 启用OceanBase Binlog服务&#xff…...

信息系统项目管理师——第8章章 项目整合管理 笔记

8 项目整合管理&#xff08;最后反过来看&#xff09; 项目整合过程&#xff1a;①制定项目章程&#xff08;启动过程&#xff09;、②制订项目管理计划&#xff08;规划过程&#xff09;、③指导和管理项目工作、管理项目知识&#xff08;执行过程&#xff09;、④监控项目工…...

最好用的图文识别OCR -- PaddleOCR(1) 快速集成

最近在项目中遇到了 OCR 的需求&#xff0c;希望能够实现高效而准确的文字识别。由于预算限制&#xff0c;我并未选择商业付费方案&#xff0c;而是优先尝试了开源工具。一开始&#xff0c;我测试了 GOT-OCR2.0&#xff0c;但由于我的 Mac 配置较低&#xff0c;不支持 GPU 运算…...

Unity制作3D场景的脑电运动想象范式(左右手抓握)

使用Unity制作3D场景中的运动想象范式 3D技术可以创建出立体的图像和环境&#xff0c;给用户带来更加真实和沉浸式的体验&#xff0c;本文介绍了一种可控的左右手运动的3D场景范式的设计流程&#xff0c;用于被试在3D场景下完成运动想象脑电信号数据的采集。 目录 1.制作动画…...

python23-常用的第三方库01:request模块-爬虫

requests 模块是 Python 中的一个第三方库&#xff0c;用于发送 HTTP 请求。 它提供了一个简单且直观的 API&#xff0c;使得发送网络请求和解析响应变得非常容易。requests 模块支持各种 HTTP 方法&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并且具有处理 cookies…...

CAT3D: Create Anything in 3D with Multi-View Diffusion Models 论文解读

24年5月的论文&#xff0c;上一版就是ReconFusion 目录 一、概述 二、相关工作 1、2D先验 2、相机条件下的2D先验 3、多视角先验 4、视频先验 5、前馈方法 三、Method 1、多视角扩散模型 2、新视角生成 3、3D重建 一、概述 该论文提出一种CAT3D方法&#xff0c;实现…...

持续学习入门

参考视频&#xff08;一&#xff09; 【学无止境&#xff1a;深度连续学习】 背景 更新新的数据时&#xff0c;数据异步输入&#xff0c;会有灾难性遗忘 现有解决策略 &#xff08;1&#xff09;引入正则约束&#xff08;2&#xff09;设计合适的动态模型架构 &#xff…...

天猫推荐数据集实践

参考自 https://github.com/xufengtt/recom_teach_code&#xff0c;学习记录。 环境配置&#xff08;maxcomputedataworks&#xff09; 下载天猫推荐数据集&#xff1b;开启 aliyun 的 maxcompute&#xff0c;dataworks&#xff0c;pai&#xff1b;使用 odpscmd 上传本地数据…...

《Vue3实战教程》33:Vue3路由

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 路由​ 客户端 vs. 服务端路由​ 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时&#xff0c;浏览器会从服务端获得全新的 HTML&…...

【大模型系列】MultiUI(2024.11)

Paper&#xff1a;https://arxiv.org/pdf/2410.13824Github&#xff1a;https://neulab.github.io/MultiUI/Author&#xff1a;Junpeng Liu et al., 卡内基梅隆 核心1&#xff1a; 先基于text-based LLMs获取网页的accessibility tree(辅助功能树&#xff0c;https://200t.w3c…...

「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统

本篇教程将实现一个模拟火车票查询系统&#xff0c;通过输入条件筛选车次信息&#xff0c;并展示动态筛选结果&#xff0c;学习事件处理、状态管理和界面展示的综合开发技巧。 关键词 条件筛选动态数据展示状态管理UI交互查询系统 一、功能说明 模拟火车票查询系统包含以下功…...

Dubbo 核心知识全解析:原理、流程与关键机制

1.说说一次 Dubbo 服务请求流程&#xff1f; Dubbo 是一个分布式服务框架&#xff0c;它简化了基于 SOA&#xff08;面向服务架构&#xff09;的应用程序的开发。一次典型的 Dubbo 服务请求流程如下&#xff1a; 服务提供者启动: 服务提供者启动后&#xff0c;会向注册中心注册…...

时间序列预测算法---LSTM

目录 一、前言1.1、深度学习时间序列一般是几维数据&#xff1f;每个维度的名字是什么&#xff1f;通常代表什么含义&#xff1f;1.2、为什么机器学习/深度学习算法无法处理时间序列数据?1.3、RNN(循环神经网络)处理时间序列数据的思路&#xff1f;1.4、RNN存在哪些问题? 二、…...

二十三种设计模式-建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种分步骤构建复杂对象的方法。这种模式允许你通过相同的创建过程构建不同的表示。建造者模式将一个复杂对象的构建与其表示分离&#xff0c;使得同样的构建过程可以创建不同的对象…...

MarkDown 的 mermaid gantt(甘特图)、mermaid sequenceDiagram (流程图) 语法解析和应用

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 MarkDown 的 mermaid gantt、mermaid sequenceDiagram 语法解析和应用前言mermaid gan…...

git submodule的使用:将别人的git仓库作为自己的子仓库

git的基本操作在该篇中展示&#xff1a;git的基本操作在日常开发中&#xff0c;我们经常会碰到需要将别人的仓库作为自己的子仓库来进行开发。下面将介绍具体将如何操作。 1、添加Submodule至自己的git仓库 1.1、创建自己的Git仓库 &#xff08;1&#xff09;在github中创建自…...

Springboot 下载附件

GetMapping("/download") public void download(RequestParam String fileId, HttpServletResponse response) throws IOException {// 查询文件信息SysFileEntity sysFileEntity fileService.queryFileById(fileId);response.setContentType("application/oct…...

MySQL 延迟复制:确保数据安全与系统稳定的秘诀

MySQL 延迟复制&#xff1a;确保数据安全与系统稳定的秘诀 在 MySQL 主从复制架构中&#xff0c;数据的同步通常是实时的。然而&#xff0c;在一些特定场景下&#xff0c;我们可能不希望从库立刻同步主库的所有更新。特别是在高风险操作或者主库出现故障时&#xff0c;实时复制…...

ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana

前言 你知道对于一个系统的上线考察&#xff0c;必备的几样东西是什么吗&#xff1f;其实这也是面试中考察求职者&#xff0c;是否真的做过系统开发和上线的必备问题。包括&#xff1a;服务治理(熔断/限流) (opens new window)、监控 (opens new window)和日志&#xff0c;如果…...

python实现自动登录12306抢票 -- selenium

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码&#xff0c;但是都不是最新的&#xff0c;我也是从网上找别人的帖子&#xff0c;看B站视频&…...

使用Diffusion Models进行图像超分辩重建

Diffusion Models专栏文章汇总:入门与实战 前言:图像超分辨率重建是一个经典CV任务,其实LR(低分辨率)和 HR(高分辨率)图像仅在高频细节上存在差异。通过添加适当的噪声,LR 图像将变得与其 HR 对应图像无法区分。这篇博客介绍一种方式巧妙利用这个规律使用Diffusion Mod…...

吾杯网络安全技能大赛——Misc方向WP

吾杯网络安全技能大赛——Misc方向WP Sign 题目介绍: 浅浅签个到吧 解题过程&#xff1a; 57754375707B64663335376434372D333163622D343261382D616130632D3634333036333464646634617D 直接使用赛博橱子秒了 flag为 WuCup{df357d47-31cb-42a8-aa0c-6430634ddf4a} 原神启动…...

Web安全 - “Referrer Policy“ Security 头值不安全

文章目录 概述原因分析风险说明Referrer-Policy 头配置选项1. 不安全的策略no-referrer-when-downgradeunsafe-url 2. 安全的策略no-referreroriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-origin 推荐配置Nginx 配置示例 在 Nginx 中配置 …...

C#OPC(上)

OPC(OLE for Process Control),用于过程控制的OLE&#xff0c;是一个工业标准&#xff0c;管理这个标准的国际组织是OPC基金会&#xff0c;OPC基金会现有会员以超过220家。遍布全球&#xff0c;包括世界上所有主要的自动化控制系统、仪器仪表及过程控制系统的公司。基于微软的O…...

Imgui + Cmake + OpenGL + GLFW 隐藏控制台窗口

网上一般是VS&#xff0c;如何在属性里面把控制台改为窗口 本文&#xff0c;使用Clion Cmake&#xff0c;实现如何隐藏控制台窗口 环境&#xff1a;OpenGL3 GLFW 添加头文件#include <windows.h>把main函数入口改为int WinMain(HINSTANCE hInstance, HINSTANCE hPrevI…...

Spring Boot(七):Swagger 接口文档

1. Swagger 简介 1.1 Swagger 是什么&#xff1f; Swagger 是一款 RESTful 风格的接口文档在线自动生成 功能测试功能软件。Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。目标是使客户端和文件系统作为服务器以同样的…...

RabbitMQ - 4 ( 22000 字 RabbitMQ 入门级教程 )

一&#xff1a; RabbitMQ 高级特性 前面主要讲解了 RabbitMQ 的概念和应用。RabbitMQ 实现了 AMQP 0-9-1 规范&#xff0c;并在此基础上进行了多项扩展。在 RabbitMQ 官方网站中详细介绍了其特性&#xff0c;我们将其中一些重要且常用的特性挑选出来进行讲解。 1.1 消息确认 …...

印象笔记07——试一试PDF标注

印象笔记07——试一试PDF标注 [!CAUTION] 根据第六期&#xff0c;我再次查询了资料&#xff0c;印象笔记还是有一些可圈可点的功能的&#xff08;当然部分有平替&#xff09;&#xff0c;针对会员作用&#xff0c;开发使用场景虽然是逆向的&#xff0c;但我坚信这是一部分人的现…...