一、背景与环境说明
本文主要对如何在本地部署FastGPT进行记录与说明,因为笔者暂时不是专门从事AI与大模型研究工作且目前理解不够,所以还不能对其中配置细节与原理阐述清楚,有待后续发掘。
主机名
IP
操作系统
规格
GPU情况
备注
t1-gpu
10.12.62.25
Ubuntu 20.04.3 LTS -amd64
8c16g+400G
NVIDIA A10*1
部署m3e向量模型
controller01
172.20.0.21
Ubuntu 20.04.3 LTS -amd64
16c64g+400G
无
部署其他所有服务或进程
二、ollama安装与使用
ollama官网:www.ollama.com
ollama的github仓库地址:https://github.com/ollama/ollama
通过ollma下载模型:ollama pull 模型链接,
模型链接查看地址:https://www.ollama.com/library
1 2 3 # 以下操作在172.20.0.21上操作,操作系统是Ubuntu 20.04.3 LTS -amd64 # 相关操作在一个名为self-llm的conda环境执行: conda activate /root/miniconda3/envs/self-llm
修改ollama的systemd service配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 修改ollama的systemd service配置文件 (self-llm) root@controller01:~# vi /etc/systemd/system/ollama.service [Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/usr/local/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 Environment="PATH=/root/anaconda3/envs/graphrag-test/bin:..." Environment="OLLAMA_HOST=0.0.0.0" #添加此行内容(否则后面docker容器化部署的open-webui不能读取到此服务器上的模型) [Install] WantedBy=default.target# 重启ollama服务 (self-llm) root@controller01:~# systemctl daemon-reload (self-llm) root@controller01:~# systemctl restart ollama
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 # 查看ollama管理的模型 (self-llm) root@controller01:~# ollama list NAME ID SIZE MODIFIED qwen:0.5b b5dc5e784f2a 394 MB 5 hours ago deepseek-coder:1.3b 3ddd2d3fc8d2 776 MB 6 hours ago quentinz/bge-large-zh-v1.5:latest bc8ca0995fcd 651 MB 3 months ago gemma2:9b ff02c3702f32 5.4 GB 3 months ago# 查看ollama命令的用法 (self-llm) root@controller01:~# ollama Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model pull Pull a model from a registry push Push a model to a registry list List models ps List running models cp Copy a model rm Remove a model help Help about any command Flags: -h, --help help for ollama -v, --version Show version information Use "ollama [command] --help" for more information about a command.
从ollama官网的模型列表中查看某个具体模型的信息:
image-20241111100916875
1 2 3 4 5 6 7 8 9 10 11 12 13 # 通过ollama运行上述模型,如果模型文件本身不存在,ollama会先去下载模型文件本身到本地 (self-llm) root@controller01:~# ollama run deepseek-coder:1.3b pulling manifest pulling d040cc185215... 100% ▕█████████████████████████████████████████████████████████████████████████████████▏ 776 MB pulling a3a0e9449cb6... 100% ▕█████████████████████████████████████████████████████████████████████████████████▏ 13 KB pulling 8893e08fa9f9... 100% ▕█████████████████████████████████████████████████████████████████████████████████▏ 59 B pulling 8972a96b8ff1... 100% ▕█████████████████████████████████████████████████████████████████████████████████▏ 297 B pulling d55c9eb1669a... 100% ▕█████████████████████████████████████████████████████████████████████████████████▏ 483 B verifying sha256 digest writing manifest removing any unused layers success > >> 你是谁?
2.1 docker部署open webui
官网地址:https://github.com/open-webui/open-webui
1 2 # 通过容器方式启动与运行 (self-llm) root@controller01:~# docker run -d -p 18080:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
然后可以通过服务器IP+18080端口,即 http://172.20.0.21:18080 访问 open
webui的web界面。
image-20241111150810100
第一次登录需要注册一个用户,然后使用此用户登录与使用。
选择一个ollama管理的模型,然后可以进行对话:
image-20241111162231984
image-20241111172408647
三、Docker
compose快速部署fastgpt
3.1 FastGPT介绍
FastGPT 是一个基于 LLM
大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过
Flow 可视化进行工作流编排,从而实现复杂的问答场景!FastGPT
是开源项目,遵循附加条件 Apache License 2.0 开源协议,可以 Fork
之后进行二次开发和发布。FastGPT
社区版将保留核心功能,商业版仅在社区版基础上使用 API
的形式进行扩展,不影响学习使用。
3.1.1 FastGPT 能力
3.1.1.1 专属 AI 客服
通过导入文档或已有问答对进行训练,让 AI
模型能根据你的文档以交互式对话方式回答问题。
3.1.1.2 简单易用的可视化界面
FastGPT
采用直观的可视化界面设计,为各种应用场景提供了丰富实用的功能。通过简洁易懂的操作步骤,可以轻松完成
AI 客服的创建和训练流程。
3.1.1.3 自动数据预处理
提供手动输入、直接分段、LLM 自动处理和 CSV
等多种数据导入途径,其中“直接分段”支持通过 PDF、WORD、Markdown 和 CSV
文档内容作为上下文。FastGPT 会自动对文本数据进行预处理、向量化和 QA
分割,节省手动训练时间,提升效能。
3.1.1.4 工作流编排
基于 Flow
模块的工作流编排,可以帮助你设计更加复杂的问答流程。例如查询数据库、查询库存、预约实验室等。
3.1.1.5 强大的 API 集成
FastGPT 对外的 API 接口对齐了 OpenAI 官方接口,可以直接接入现有的 GPT
应用,也可以轻松集成到企业微信、公众号、飞书等平台。
3.1.2 其他说明
参考:https://doc.tryfastgpt.ai/docs/development/docker/
MongoDB:用于存储除了向量外的各类数据
PostgreSQL/Milvus:存储向量数据
OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过
OneAPI 测试校验)
3.2 安装docker 和
docker-compose
1 2 3 4 5 6 7 8 9 # 安装 Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl enable --now docker# 安装 docker-compose curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose chmod +x /usr/bin/docker-compose# 验证安装 docker -v docker-compose -v
3.3 下载docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 root@controller01:~# conda activate /root/miniconda3/envs/self-llm root@controller01:~# cd /root/miniconda3/envs/self-llm (self-llm) root@controller01:~/miniconda3/envs/self-llm# mkdir fastgpt (self-llm) root@controller01:~/miniconda3/envs/self-llm# cd fastgpt (self-llm) root@controller01:~/miniconda3/envs/self-llm# wget https://raw.githubusercontent.com/labring/FastGPT/refs/heads/main/projects/app/data/config.json# pgvector 版本(测试推荐,简单快捷) (self-llm) root@controller01:~/miniconda3/envs/self-llm# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# cp -p docker-compose-pgvector.yml docker-compose.yml (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# ll total 32 drwxr-xr-x 2 root root 4096 Nov 7 16:26 ./ drwxr-xr-x 14 root root 4096 Nov 7 16:35 ../ -rw-r--r-- 1 root root 6771 Nov 7 16:25 config.json -rw-r--r-- 1 root root 5644 Nov 7 16:26 docker-compose-pgvector.yml -rw-r--r-- 1 root root 5644 Nov 7 16:26 docker-compose.yml# 1)编辑docker-compose.yml,使用阿里云镜像 (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# vi docker-compose.yml (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# grep "image:" docker-compose.yml #image: pgvector/pgvector:0.7.0-pg15 # docker hub image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云 #image: mongo:5.0.18 # dockerhub image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云 # image: mongo:4.4.29 # cpu不支持AVX时候使用 #image: ghcr.io/labring/fastgpt-sandbox:v4.8.11 # git image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.8.11 # 阿里云 #image: ghcr.io/labring/fastgpt:v4.8.11 # git image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.11 # 阿里云 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云 #image: mysql:8.0.36 #image: ghcr.io/songquanpeng/one-api:v0.6.7 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云# 2)修改mysql容器在宿主机上的映射端口为3307(我宿主机上3307端口已经被其他服务占用了) (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# vi docker-compose.yml # oneapi mysql: image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云 #image: mysql:8.0.36 container_name: mysql restart: always ports: - 3307:3306 #此修改此处 networks: - fastgpt command: --default-authentication-plugin=mysql_native_password environment: # 默认root密码,仅首次运行有效 MYSQL_ROOT_PASSWORD: oneapimmysql MYSQL_DATABASE: oneapi volumes: - ./mysql:/var/lib/mysql oneapi: container_name: oneapi #image: ghcr.io/songquanpeng/one-api:v0.6.7 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云 ports: - 3001:3000 depends_on: - mysql networks: - fastgpt restart: always environment: # mysql 连接参数 - SQL_DSN=root:oneapimmysql@tcp(mysql:3306)/oneapi# 3)修改OPENAI_BASE_URL的值,CHAT_API_KEY的值暂时不变后续再改 (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# vi docker-compose.yml# AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。 # - OPENAI_BASE_URL=http://172.20.0.21:3001/v1# AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改) - CHAT_API_KEY=sk-fastgpt# 4)在oneapi容器后,再添加一个m3e容器 # (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# vi docker-compose.yml # m3e: # image: registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest # container_name: m3e # restart: always # ports: # - 6008:6008 # networks: # - fastgpt # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: 1 # capabilities: [gpu] # 相关容器说明: # pgvector:向量数据库 # mongdb:存储用户信息、文件文档信息 # fastgpt:主程序,其中用到了config.json文件 # mysql: # oneapi:接口统一
3.4 启动m3e向量模型
启动m3e向量模型(如果在docker-compose.ym中没配置)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # 启动m3e向量模型在上述说明的安装有一个NVIDIA A10 GPU的服务器t1-gpu(ip:10.12.62.25)上操作 docker pull registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest# GPU模式启动, 并把m3e加载到fastgpt同一个网络(使用一张卡:--gpus='"device=0"' ;使用第0,1张卡:--gpus='"device=0,1"' ;使用全部GPU:--gpus all)。以下默认会将容器的6008端口映射到宿主机的6008端口 # 指定所有GPU docker run -dt \ --name m3e-large-api \ --gpus all \ --privileged \ --net=host \ --ipc=host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest# 通过序号指定GPU(此时不要加“--privileged”参数,否则仍然可以看到所有GPU) docker run -dt \ --name m3e-large-api \ --gpus='"device=0"' \ --net=host \ --ipc=host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest# #
3.5 修改 config.json 文件
FastGPT
模型配置说明:https://doc.tryfastgpt.ai/docs/development/modelconfig/intro/
关于config.json文件的说明:https://github.com/labring/FastGPT/blob/main/projects/app/data/model.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 # 在llmModels部分添加如下模型配置 # 其中 deepseek-coder:1.3b 是先前通过ollama已经拉取下来的模型 { "model": "deepseek-coder:1.3b", "name": "deepseek-coder:1.3b", "avatar": "/imgs/model/openai.svg", "maxContext": 128000, "maxResponse": 4000, "quoteMaxToken": 100000, "maxTemperature": 1.2, "charsPointsPrice": 0, "censor": false, "vision": false, "datasetProcess": true, "usedInClassify": true, "usedInExtractFields": true, "usedInToolCall": true, "usedInQueryExtension": true, "toolChoice": false, "functionCall": false, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": { "temperature": 1, "stream": false }, "fieldMap": { "max_tokens": "max_completion_tokens" } }# 在 vectorModels 部分添加如下模型配置。 # 其中这个m3e模型就是先前在docker-compose.ym文件中手动新添加的向量模型 { "model": "m3e", "name": "M3E", "price": 0, "defaultToken": 500, "maxToken": 1800 }
3.6 启动容器
1 2 3 4 5 6 7 8 9 10 11 (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# docker-compose up -d# 启动完成后,查看容器列表 (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS fastgpt registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.11 "sh -c 'node --max-o…" fastgpt 39 seconds ago Up 37 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp mongo registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 "bash -c 'openssl ra…" mongo 39 seconds ago Up 37 seconds 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mysql registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 "docker-entrypoint.s…" mysql 39 seconds ago Up 37 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp oneapi registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 "/one-api" oneapi 39 seconds ago Up 35 seconds 0.0.0.0:3001->3000/tcp, :::3001->3000/tcp pg registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 "docker-entrypoint.s…" pg 39 seconds ago Up 37 seconds 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp sandbox registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.8.11 "docker-entrypoint.s…" sandbox 39 seconds ago Up 37 seconds
3.7 打开 OneAPI 添加模型
可以通过ip:3001
访问OneAPI,默认账号为root
密码为123456
。
在OneApi中添加合适的AI模型渠道。点击查看相关教程
3.7.1 登录OneApi
image-20241107171404284
3.7.2 创建令牌和渠道
3.7.2.1 创建令牌
image-20241113183540805
3.7.2.2 创建渠道
image-20241107172511431
image-20241107172632721
3.7.2.1.1 创建ollama渠道
image-20241113184117696
上图中Base URL样中,更建议将host.docker.internal
换成对应的ip地址。
上图中创建ollama渠道时,模型栏可以将ollama中已经拉取到所有模型都填写进去。
提交后,可以点击"测试"按钮进行测试:
image-20241113184505093
3.7.2.1.2 创建m3e渠道
image-20241113185816938
image-20241113190216645
此处 m3e 渠道测试时报404,暂时不理会。
3.8 重启fastgpt相关容器
复制 ollama 令牌的密钥:
image-20241113190828105
sk-ZJ0I49yR2NYUG9mu326cF283380b46159d2b347eB00eD8E3
修改docker.compose.yml文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# vi docker-compose.yml ... fastgpt: container_name: fastgpt #image: ghcr.io/labring/fastgpt:v4.8.11 # git image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.11 # 阿里云 ports: - 3000:3000 networks: - fastgpt depends_on: - mongo - pg - sandbox - oneapi restart: always environment: # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 - DEFAULT_ROOT_PSW=1234 # AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。 ###- OPENAI_BASE_URL=http://oneapi:3000/v1 - OPENAI_BASE_URL=http://172.20.0.21:3001/v1 # AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改) #- CHAT_API_KEY=sk-fastgpt - CHAT_API_KEY=sk-ZJ0I49yR2NYUG9mu326cF283380b46159d2b347eB00eD8E3 #####修改这里 ...
执行重启容器:
1 2 3 4 5 6 7 8 9 10 (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# docker-compose restart (self-llm) root@controller01:~/miniconda3/envs/self-llm/fastgpt# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS fastgpt registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.11 "sh -c 'node --max-o…" fastgpt 8 seconds ago Up 5 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp mongo registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 "bash -c 'openssl ra…" mongo 8 seconds ago Up 6 seconds 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mysql registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 "docker-entrypoint.s…" mysql 8 seconds ago Up 6 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp oneapi registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 "/one-api" oneapi 8 seconds ago Up 5 seconds 0.0.0.0:3001->3000/tcp, :::3001->3000/tcp pg registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 "docker-entrypoint.s…" pg 8 seconds ago Up 6 seconds 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp sandbox registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.8.11 "docker-entrypoint.s…" sandbox 8 seconds ago Up 7 seconds
四、FastGPT中配置知识库与应用
目前可以通过 ip:3000
直接访问(注意防火墙)。登录用户名为
root
,密码为docker-compose.yml
环境变量里设置的
DEFAULT_ROOT_PSW
。
如果需要域名访问,请自行安装并配置 Nginx。
首次运行,会自动初始化 root 用户,密码为
1234
(与环境变量中的DEFAULT_ROOT_PSW
一致),日志里会提示一次MongoServerError: Unable to read from a snapshot due to pending collection catalog changes;
可忽略。
image-20241107174345779
登录后,默认是没有可用的应用的。
4.1 创建通用知识库
image-20241113192714415
4.2 知识库导入数据集
image-20241113192910065
image-20241113192954019
此处选择本地一个doc 文件,然后下一步:
image-20241113193141780
选择问答拆分,然后下一步:
image-20241113193227525
开始上传:
image-20241113193305696
上传完成后:
image-20241113193357782
请等待知识库文件条目的状态变更为“已就绪”
4.3 创建应用
image-20241113193630915
选择“知识库+对话引导”:
image-20241113193709870
4.4 配置应用
image-20241113193846005
选择deepseek-coder:1.3b:
image-20241113193942936
关联知识库:
image-20241113200034815
选择先前创建的知识库:
image-20241113200112918
然后,右上角,点击“保存并发布”。
image-20250123150725679
4.5 查看应用与使用
4.5.1 在工作台中使用
image-20250123150751085
image-20250123150948199
4.5.2 在聊天中直接使用
image-20250123151056398
image-20250123151156093
五、备注
5.1 现有问题
5.1.1
每次使用问答功能时,fastgpt容器日志中会有如下错误
image-20241208094204434
解决办法:
暂未解决。从网上查看的资料来看,极可能是config.json文件中关于模型的某个参数配置不正确或不恰当所致,但不知是哪个具体是哪个地方的配置不当所致。此报错暂时不影响整体功能
5.2 参考视频
https://www.bilibili.com/video/BV1xMyGYwEdk/?spm_id_from=333.337.search-card.all.click&vd_source=0b5fe5d5aa31f64bf7462d1d094b70a2
5.3 后续更新
笔者个人博客“https://jiangsanyin.github.io/archives/”2024年12月7日的文章