AI 四月 14, 2024

无外网环境部署 AgentFabric 及使用 AgentFabric 构建的 Agent

文章字数 8.8k 阅读约需 8 mins. 阅读次数

  • 目标:在纯内网环境完成基于 ModelScope-Agent 的可定制化的 Agent 的构建和发布
  • 前提:需在有外网环境提前下载好所需内容

一、外网环境中下载所需内容

在可以访问外网的环境中,准备一个工作目录(如:/data/work),在这个目录下进行后续操作。

1. 拉取镜像

拉取 ModelScope-Agent 镜像,镜像中已经安装好所需依赖。

docker pull registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope-agent:v0.3.0

导出镜像文件:

docker save > modelscope-agent.tar \
registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope-agent:v0.3.0

启动容器:

docker run -ti -v /data/work:/data/work \
registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope-agent:v0.3.0 bash

其中 -v /data/work:/data/work 把本地 /data/work 目录挂载到容器中的相同路径。执行命令此命令后已进入容器,后续操作都将在容器中进行。

从容器中进入到工作目录:

cd /data/work

2. 下载 LLM 模型

在容器工作目录中下载模型到本地:以 qwen/Qwen1.5-7B-Chat 模型为例,可以换成其他微调的模型:

python -c "from modelscope import snapshot_download; snapshot_download('qwen/Qwen1.5-7B-Chat', cache_dir='qwen1.5-7b-chat')"

3. 下载 Embedding 模型

在容器工作目录中下载 ModelScope-Agent 使用的 Embedding 模型
damo/nlp_gte_sentence-embedding_chinese-base
也可换成其他模型:

git clone https://www.modelscope.cn/iic/nlp_gte_sentence-embedding_chinese-base.git

4. 下载 ModelScope-Agent 代码

在容器工作目录中拉取 ModelScope-Agent 最新 master 分支代码:

git clone https://github.com/modelscope/modelscope-agent.git

5. 下载内容传输至内网环境

将工作目录传输至内网离线环境对应目录中,可同样使用 /data/work

二、内网环境部署 LLM

导入镜像

进入工作路径 /data/work,导入镜像文件:

docker load < modelscope-agent.tar

部署 LLM 服务

ModelScope 提供模型 本地启动服务 功能。

这里我们使用该功能,将模型部署成 Openai API 兼容的接口。具体操作可参考如下:

# 创建并进入容器
nvidia-docker run -ti --net host -v /data/work:/data/work \
registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope-agent:v0.3.0 bash

从容器中进入到工作目录:

cd /data/work

在容器工作目录中启动服务:

MODELSCOPE_CACHE='qwen1.5-7b-chat' python -m vllm.entrypoints.openai.api_server \
    --model qwen/Qwen1.5-7B-Chat --dtype=half --max-model-len 8192  --gpu-memory-utilization 0.95 &

随后测试模型服务,如果正确返回,说明模型服务部署完成。

curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen/Qwen1.5-7B-Chat",
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "写一篇春天为主题的作文"}
        ],
        "stop": ["<|im_end|>", "<|endoftext|>"]
    }'

三、内网环境部署 AgentFabric

另起一个终端窗口,登录到上面拉起的 docker 容器中:

# 查看之前容器ID
sudo docker ps -a
# 进入对应容器ID的容器
sudo docker exec -ti CONTAINER_ID bash

在容器工作目录(/data/work)中进行后续操作。

编辑模型配置文件

编辑 modelscope-agent/apps/agentfabric/config/model_config.json, 增加如下配置:

diff --git a/apps/agentfabric/config/model_config.json b/apps/agentfabric/config/model_config.json
index 4db68ce..be7fbf3 100644
--- a/apps/agentfabric/config/model_config.json
+++ b/apps/agentfabric/config/model_config.json
@@ -124,5 +124,12 @@
         "api_base": "http://localhost:8000/v1",
         "is_chat": true,
         "is_function_call": false
+    },
+    "qwen1.5-7b-chat": {
+        "type": "openai",
+        "model": "qwen/Qwen1.5-7B-Chat",
+        "api_base": "http://localhost:8000/v1",
+        "is_chat": true,
+        "is_function_call": false
     }
 }

编辑 Embedding 模型 model_id

编辑 modelscope-agent/modelscope_agent/storage/vector_storage.py,将该文件中的模型 model_id 修改为本地模型路径:

diff --git a/modelscope_agent/storage/vector_storage.py b/modelscope_agent/storage/vector_storage.py
index c6f9fdc..29f518a 100644
--- a/modelscope_agent/storage/vector_storage.py
+++ b/modelscope_agent/storage/vector_storage.py
@@ -28,7 +28,7 @@ class VectorStorage(BaseStorage):
         self.storage_path = storage_path
         self.index_name = index_name
         self.embedding = embedding or ModelScopeEmbeddings(
-            model_id='damo/nlp_gte_sentence-embedding_chinese-base')
+            model_id='/data/work/nlp_gte_sentence-embedding_chinese-base')
         self.vs_cls = vs_cls
         self.vs_params = vs_params
         self.index_ext = index_ext

拉起 AgentFabric

modelscope-agent/apps/agentfabric 目录下执行如下命令拉起 AgentFabric Gradio:

GRADIO_SERVER_NAME=0.0.0.0 PYTHONPATH=../../  python app.py

启动时如遇 ModuleNotFoundError: No module named 'modelscope_studio' 报错,请将 modelscope-agent 仓库回滚至 8deef6d4git checkout 8deef6d4),因为后面的 68c7dd7f 提交修改了依赖,导致镜像中缺少新增的依赖。

如需更改默认配置文件路径,可修改 modelscope-agent/apps/agentfabric/config_utils.py 中的 DEFAULT_AGENT_DIR 和通过环境变量指定 CODE_INTERPRETER_WORK_DIR,如:

CODE_INTERPRETER_WORK_DIR=/data/work/agentfabric/ci_workspace \
GRADIO_SERVER_NAME=0.0.0.0 PYTHONPATH=../../  python app.py

然后在浏览器中输入 http://内网服务器IP:7860 打开即可看到如下界面。

AgentFabric

四、内网环境发布使用 AgentFabric 构建的 Agent

通过 AgentFabric 完成 Agent 的基本配置之后,在 配置(Configure) tab 页点击左侧下方的 更新配置 按钮,
即可将自定义的配置内容生成至指定的配置文件中(默认路径为 /tmp/agentfabric/config/local_user/builder_config.json)。

完成配置后可停掉 AgentFabric 的 Gradio 应用。

发布配置好的 Agent Gradio 应用,可在 modelscope-agent/apps/agentfabric 目录下执行如下命令:

GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7865 PYTHONPATH=../../  python appBot.py

如启动 AgentFabric 时指定了配置文件路径,启动 Agent 时也需指定相同路径。

然后在浏览器中输入 http://内网服务器IP:7865 打开即可看到界面。

Custom Agent

0%