【InternLM实战营---第三节课作业】

一、学习笔记

https://blog.csdn.net/weixin_45609124/article/details/137526985

二、基础作业

①、在茴香豆 Web 版中创建自己领域的知识问答助手

由于我在InternLM Studio上算力有限,加上我对茴香豆对接微信的功能感兴趣,我决定在自己的算力上进行部署。

参考茴香豆官方web教程可以发现整体服务分前后端算法两部分,先搞定算法部分吧。我用的系统是ubuntu20.04。

1. 准备Python环境

通过conda创建独立并且隔离的环境

conda create -n hxd python=3.10

激活环境

conda activate hxd

如果没有安装conda,可以参考这个安装教程

2. 下载配置中的模型

考虑到 huggingface 连接问题,先手动下载到本地,然后在 config.ini 设置模型路径。在config.ini中可以看到使用的text2vec模型分别是"maidalun1020/bce-embedding-base_v1"和"maidalun1020/bce-reranker-base_v1",教程上推荐使用huggingface的国内镜像进行下载,这种方式还需要登录验证获得许可,我不喜欢,我决定站在巨人的肩膀上来进行下载。

首先需要安装Git LFS,全称Large File Storage,是Git版本控制系统的一个扩展。它主要用于处理大型二进制文件,如图像、音频和视频等文件。没有安装过的小伙伴可以参考这个安装教程

# 在你想要存放模型的地方,初始化Git LFS
git lfs install

git lfs

# 下载text2vec模型
git clone https://www.modelscope.cn/maidalun/bce-embedding-base_v1.git

git clone https://www.modelscope.cn/maidalun/bce-reranker-base_v1.git

# 下载internlm2-chat-20b
git clone https://www.modelscope.cn/Shanghai_AI_Laboratory/internlm2-chat-20b.git
3. 下载代码和安装依赖
# 下载 repo
git clone https://github.com/internlm/huixiangdou --depth=1 && cd huixiangdou

# 安装解析 word 文档所需依赖
apt update
apt install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig libpulse-dev

# 安装 python 依赖
pip install -r requirements.txt
4. 修改配置文件至符合自己的需求
vim config.ini

如下图所示,即可满足启动web服务在这里插入图片描述

5. 安装Redis

有现成Redis服务的可直接跳过

# 以 Ubuntu 系统为例
# 安装 Redis 服务和客户端
sudo apt install redis-server redis-tools

# 设置 Redis 密码(默认配置文件在/etc/redis/redis.conf),比如设置为:redis123
sudo vim /etc/redis/redis.conf
# 将 requirepass your_password_here 注释打开并修改为如下内容,保存即可
requirepass redis123

# 启动redis
sudo redis-server /etc/redis/redis.conf
# 查看redis是否启动成功
netstat -nlpt | grep redis
6. 设置环境变量
vim ~/.bashrc
# 将以下环境变量添加到~/.bashrc文件的末尾

export PYTHONUNBUFFERED=1
# Redis 的 IP 地址
export REDIS_HOST=10.1.52.22
# Redis 的密码
export REDIS_PASSWORD=${REDIS_PASSWORD}
# Redis 的端口,默认为 6379
export REDIS_PORT=6380
# JWT_SECRET 是指用于签名 JSON Web Token (JWT) 的密钥或密钥对,可以使用 `openssl rand -base64 32` 命令生成
export JWT_SECRET=${JWT_SEC}
# 茴香豆的后台服务端口,可以自定义
export SERVER_PORT=7860
# 以下内容现阶段先忽略,完成进阶作业时,再回过头来改
# 飞书的 LARK_ENCRYPT_KEY,参考地址:https://open.larksuite.com/document/server-docs/event-subscription/event-subscription-configure-/request-url-configuration-case
# 如果不需要接通飞书忽略即可
export HUIXIANGDOU_LARK_ENCRYPT_KEY=thisiskey
export HUIXIANGDOU_LARK_VERIFY_TOKEN=sMzyjKi9vMlEhKCZOVtBMhhl8x23z0AG

# set your service endpoint(open to Internet callback from lark and wechat)
# 回调地址端口,建议填写 127.0.0.1:7860,然后将 7860 端口通过公网 IP 代理出去,例如 http://10.1.52.36:18443
export HUIXIANGDOU_MESSAGE_ENDPOINT=http://10.1.52.36:18443
# 如果使用 https 安全连接就把 COOKIE_SECURE 设置为 1;如果不是,则将 `export COOKIE_SECURE=1` 替换为 `unset COOKIE_SECURE`
export unset COOKIE_SECURE
# 刷新环境变量
source ~/.bashrc
7. 编译前端 & 运行后端服务

安装 Node.js npm (需要版本为 20.x , 安装时, 可根据用户权限需要自行添加 sudo + 命令)

apt update
apt install nodejs npm
node -v # v20.12.0

如果 node -v 版本太老 (10.x),则需要升级 node 版本

npm install n -g
n stable
hash -r
node -v # v20.12.0

编译项目

cd /you/path//huixiangdou/web/front-end
npm install && npm run build

安装依赖、运行后端

cd ../../ # 从front-end返回到huixiangdou目录下, 该目录内含有web文件夹
python3 -m pip install -r web/requirements.txt
python3 -m web.main

后端服务运行页面

8. 运行算法 pipeline
# 先开个终端窗口,启动 LLM hybrid proxy
python3 -m huixiangdou.service.llm_server_hybrid --config_path config.ini

LLM服务

再开个窗口,监听服务
python3 -m web.proxy.main

监听服务

9. 测试 打开服务器 7860 端口,创建知识库测试效果

终于见到页面了,不容易 ,做的过程中后知后觉,基础作业原来是不用自己搭建服务的,但是做到一半了,也不能放弃啊,权当为进阶作业做铺垫了。
运行效果图
正例问答效果如下图所示:
问答效果
反例问答效果如下图所示:
在这里插入图片描述

10. 上传excle文件报错以及解决方案

解析excel出问题
官方提供的web demo也不能成功解析Excel文件,如图:
官方demo的图片

可以更新下面的依赖,进行修复
我这边是通过这种方式修复,不知道会不会引发其他问题,待测

pip install --upgrade xlrd

成功修复

②、在 InternLM Studio 上部署茴香豆技术助手

上面已经部署过web版了,对整个流程比较熟悉了,而且在InternLM Studio上进行操作,平台以及提前准备好需要的模型了,这里照着北辰老师的教程走就可以了。

1. 环境准备

进入开发机后,从官方环境复制运行 InternLM 的基础环境,命名为 InternLM2_Huixiangdou,在命令行模式下运行:

studio-conda -o internlm-base -t InternLM2_Huixiangdou

运行 conda 命令,激活 InternLM2_Huixiangdou python 虚拟环境:

conda activate InternLM2_Huixiangdou

安装Python依赖

pip install protobuf==4.25.3 accelerate==0.28.0 aiohttp==3.9.3 auto-gptq==0.7.1 bcembedding==0.1.3 beautifulsoup4==4.8.2 einops==0.7.0 faiss-gpu==1.7.2 langchain==0.1.14 loguru==0.7.2 lxml_html_clean==0.1.0 openai==1.16.1 openpyxl==3.1.2 pandas==2.2.1 pydantic==2.6.4 pymupdf==1.24.1 python-docx==1.1.0 pytoml==0.1.21 readability-lxml==0.8.1 redis==5.0.3 requests==2.31.0 scikit-learn==1.4.1.post1 sentence_transformers==2.2.2 textract==1.6.5 tiktoken==0.6.0 transformers==4.39.3 transformers_stream_generator==0.0.5 unstructured==0.11.2
2. 从茴香豆官方仓库下载茴香豆。
cd /root
# 下载 repo
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 447c6f7e68a1657fce1c4f7c740ea1700bde0440
3. 模型准备

复制茴香豆所需模型文件,为了减少下载和避免 HuggingFace 登录问题,所有作业和教程涉及的模型都已经存放在 Intern Studio 开发机共享文件中。

# 创建模型文件夹
cd /root && mkdir models

# 复制BCE模型
ln -s /root/share/new_models/maidalun1020/bce-embedding-base_v1 /root/models/bce-embedding-base_v1
ln -s /root/share/new_models/maidalun1020/bce-reranker-base_v1 /root/models/bce-reranker-base_v1

# 复制大模型参数(下面的模型,根据作业进度和任务进行**选择一个**就行)
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b

4. 修改配置文件

用已下载模型的路径替换 /root/huixiangdou/config.ini 文件中的默认模型

修改用于向量数据库和词嵌入的模型

sed -i '6s#.*#embedding_model_path = "/root/models/bce-embedding-base_v1"#' /root/huixiangdou/config.ini
用于检索的重排序模型

sed -i '7s#.*#reranker_model_path = "/root/models/bce-reranker-base_v1"#' /root/huixiangdou/config.ini
和本次选用的大模型

sed -i '29s#.*#local_llm_path = "/root/models/internlm2-chat-7b"#' /root/huixiangdou/config.ini
5. 创建知识库

将茴香豆github仓库文件作为知识库

cd /root/huixiangdou && mkdir repodir

git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou

运行下面的命令,增加茴香豆相关的问题到接受问题示例中:

cd /root/huixiangdou
mv resource/good_questions.json resource/good_questions_bk.json

echo '[
    "mmpose中怎么调用mmyolo接口",
    "mmpose实现姿态估计后怎么实现行为识别",
    "mmpose执行提取关键点命令不是分为两步吗,一步是目标检测,另一步是关键点提取,我现在目标检测这部分的代码是demo/topdown_demo_with_mmdet.py demo/mmdetection_cfg/faster_rcnn_r50_fpn_coco.py checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth   现在我想把这个mmdet的checkpoints换位yolo的,那么应该怎么操作",
    "在mmdetection中,如何同时加载两个数据集,两个dataloader",
    "如何将mmdetection2.28.2的retinanet配置文件改为单尺度的呢?",
    "1.MMPose_Tutorial.ipynb、inferencer_demo.py、image_demo.py、bottomup_demo.py、body3d_pose_lifter_demo.py这几个文件和topdown_demo_with_mmdet.py的区别是什么,\n2.我如果要使用mmdet是不是就只能使用topdown_demo_with_mmdet.py文件,",
    "mmpose 测试 map 一直是 0 怎么办?",
    "如何使用mmpose检测人体关键点?",
    "我使用的数据集是labelme标注的,我想知道mmpose的数据集都是什么样式的,全都是单目标的数据集标注,还是里边也有多目标然后进行标注",
    "如何生成openmmpose的c++推理脚本",
    "mmpose",
    "mmpose的目标检测阶段调用的模型,一定要是demo文件夹下的文件吗,有没有其他路径下的文件",
    "mmpose可以实现行为识别吗,如果要实现的话应该怎么做",
    "我在mmyolo的v0.6.0 (15/8/2023)更新日志里看到了他新增了支持基于 MMPose 的 YOLOX-Pose,我现在是不是只需要在mmpose/project/yolox-Pose内做出一些设置就可以,换掉demo/mmdetection_cfg/faster_rcnn_r50_fpn_coco.py 改用mmyolo来进行目标检测了",
    "mac m1从源码安装的mmpose是x86_64的",
    "想请教一下mmpose有没有提供可以读取外接摄像头,做3d姿态并达到实时的项目呀?",
    "huixiangdou 是什么?",
    "使用科研仪器需要注意什么?",
    "huixiangdou 是什么?",
    "茴香豆 是什么?",
    "茴香豆 能部署到微信吗?",
    "茴香豆 怎么应用到飞书",
    "茴香豆 能部署到微信群吗?",
    "茴香豆 怎么应用到飞书群",
    "huixiangdou 能部署到微信吗?",
    "huixiangdou 怎么应用到飞书",
    "huixiangdou 能部署到微信群吗?",
    "huixiangdou 怎么应用到飞书群",
    "huixiangdou",
    "茴香豆",
    "茴香豆 有哪些应用场景",
    "huixiangdou 有什么用",
    "huixiangdou 的优势有哪些?",
    "茴香豆 已经应用的场景",
    "huixiangdou 已经应用的场景",
    "huixiangdou 怎么安装",
    "茴香豆 怎么安装",
    "茴香豆 最新版本是什么",
    "茴香豆 支持哪些大模型",
    "茴香豆 支持哪些通讯软件",
    "config.ini 文件怎么配置",
    "remote_llm_model 可以填哪些模型?"
]' > /root/huixiangdou/resource/good_questions.json

再创建一个测试用的问询列表,用来测试拒答流程是否起效:

cd /root/huixiangdou

echo '[
"huixiangdou 是什么?",
"你好,介绍下自己"
]' > ./test_queries.json

在确定好语料来源后,运行下面的命令,创建 RAG 检索过程中使用的向量数据库:

# 创建向量数据库存储目录
cd /root/huixiangdou && mkdir workdir 

# 分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir
python3 -m huixiangdou.service.feature_store --sample ./test_queries.json

向量数据库的创建需要等待一小段时间,过程约占用 1.6G 显存。

完成后,Huixiangdou 相关的新增知识就以向量数据库的形式存储在 workdir 文件夹下。

6. 运行茴香豆知识助手
# 填入问题
sed -i '74s/.*/    queries = ["huixiangdou 是什么?", "茴香豆怎么部署到微信群", "今天天气怎么样?"]/' /root/huixiangdou/huixiangdou/main.py

# 运行茴香豆
cd /root/huixiangdou/
python3 -m huixiangdou.main --standalone

7 最终运行效果

照着教程一步一步来,一点问题都没有,为老师点赞效果图

三、进阶作业

待做,计划是完成对接茴香豆到微信,补全自己搭建的web版。

  • 31
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值