AutoGLM多卡部署与体验

2025年12月1日字节推出了豆包手机助手技术预览版,让我们看到了AI与移动设备深度融合,但是接连遭到各个大厂APP的封禁政策,就在前两天智谱的AutoGLM则以开源的形式让每台手机都能成为豆包手机!

AutoGLM的意义不仅在于技术突破,更在于它打开了一扇通往"AI助手"真正落地的大门。当AI能够理解你的需求,自动完成手机上的复杂操作——搜索信息、购物比价、甚至处理多应用协同任务,这将彻底改变我们与智能设备的交互方式。

大厂在慌什么呢?无非就是时代真的要大变天了,APP的首页流量入口不重要了。你可以封锁豆包手机,但是你不能封锁"开源"的力量。历史总是惊人的相似——还记得2001年,微软前CEO史蒂夫·鲍尔默将Linux称为"癌症",认为开源会破坏知识产权体系;微软曾通过专利诉讼、FUD策略试图打压Linux的发展。然而时间来到2018年,微软却以75亿美元收购了全球最大的开源平台GitHub;2019年,Windows Subsystem for Linux (WSL)成为Windows的核心功能;如今的微软Azure云平台上,超过60%的虚拟机运行的是Linux系统。微软用20年时间证明了一个道理:与其对抗开源浪潮,不如拥抱它、参与它、引领它

今天的移动互联网巨头们,又站在了当年微软的十字路口。我相信封禁只能延缓,却无法阻止技术进步的洪流。

AutoGLM核心逻辑

从技术层面来看,AutoGLM基于多模态视觉语言模型,能够:

  • 视觉理解:通过屏幕截图理解当前界面状态
  • 任务规划:将自然语言需求分解为可执行的操作步骤
  • 精准执行:通过坐标定位完成点击、输入等交互动作
  • 持续学习:根据执行反馈不断调整策略

这次开源标志着我们正在从"被动使用手机"迈向"AI代理使用手机"的新时代。我将详细介绍如何在8卡A100环境下部署AutoGLM-Phone-9B模型,并展示其在实际场景中的表现。

部署环境配置

本次部署基于 A100 * 8 卡服务器环境:

  • Driver Version: 535.247.01
  • CUDA Version: 12.2

1. NVIDIA 驱动安装

1.1 查看可用驱动

ubuntu-drivers devices

1.2 安装 NVIDIA 驱动

sudo apt install nvidia-driver-535-server

1.3 安装 Fabric Manager

重要:多卡环境需要安装 nvidia-fabricmanager 来支持多卡 NVLink 通信。

DRIVER=535.247.01
MAJOR=${DRIVER%%.*}
wget https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64/nvidia-fabricmanager-${MAJOR}_${DRIVER}-1_amd64.deb
sudo dpkg -i nvidia-fabricmanager-${MAJOR}_${DRIVER}-1_amd64.deb

1.4 启动 Fabric Manager 服务

sudo systemctl enable nvidia-fabricmanager
sudo systemctl start nvidia-fabricmanager
sudo systemctl status nvidia-fabricmanager

1.5 验证 NVSwitch 连接

nvidia-smi topo -m

能看到 GPU 之间出现 NVLink/XGMII 即表示 Fabric Manager 正常工作。

2. 配置 NVIDIA 容器工具

2.1 添加 NVIDIA 容器库

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

2.2 安装容器工具包

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

2.3 配置 Docker Runtime

# 生成配置文件
sudo nvidia-ctk runtime configure --runtime=docker

# 重启 Docker 服务
sudo systemctl restart docker

2.4 验证配置

cat /etc/docker/daemon.json

3. 模型部署

3.1 拉取 VLLM 镜像

docker pull vllm/vllm-openai:v0.12.0

3.2 下载 AutoGLM 模型

# 安装 ModelScope 下载工具
pip install modelscope

# 创建目录并下载模型
mkdir -p /opt/model
modelscope download --model 'ZhipuAI/AutoGLM-Phone-9B' --local_dir '/home/algorithm/PycharmProjects/vllm/models/AutoGLM'

3.3 启动 VLLM 容器

docker run -it \
 --entrypoint /bin/bash \
 --gpus all \
 -e NVIDIA_VISIBLE_DEVICES=all \
 -e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
 -p 8800:8000 \
 --ipc=host \
 -v /home/algorithm/PycharmProjects/vllm/models/AutoGLM:/app/model \
 --name autoglm \
 vllm/vllm-openai:v0.12.0

3.4 验证 GPU 可用性

在容器内执行:

python3 -c "import torch, pprint; print(torch.cuda.is_available(), torch.cuda.device_count())"
# 输出: True 8

3.5 启动 VLLM 服务

以下命令启动 8 卡并行推理服务(tensor-parallel-size 8):

python3 -m vllm.entrypoints.openai.api_server \
 --served-model-name autoglm-phone-9b \
 --allowed-local-media-path /   \
 --mm-encoder-tp-mode data \
 --mm_processor_cache_type shm \
 --mm_processor_kwargs "{\"max_pixels\":5000000}" \
 --max-model-len 25480  \
 --tensor-parallel-size 8 \
 --chat-template-content-format string \
 --limit-mm-per-prompt "{\"image\":10}" \
 --model /app/model \
 --port 8000

注意:如果需要短时间的长期运行,建议使用 nohup 启动。

3.6 服务测试

python scripts/check_deployment_cn.py --base-url http://10.85.36.11:8800/v1 --model "autoglm-phone-9b"

测试结果:

4. 常见问题处理

4.1 共享内存段残留问题

问题描述:上一次启动异常退出,共享内存段 /VLLM_OBJECT_STORAGE_SHM_BUFFER 没释放,导致新的 SHM RingBuffer 无法创建,抛出 FileExistsError: [Errno 17] File exists(vLLM 0.12.0 已知问题)。

解决方案:清理残留段即可,无需改代码、降版本或重装。

# 列出所有 vllm 残留的共享内存段
ls -l /dev/shm/ | grep VLLM

# 删除残留段(*号保险写法,避免误删)
sudo rm -f /dev/shm/VLLM_*

# 如果系统装了 ipcs 也可以使用
ipcs -m | grep $USER | awk '{print $2}' | xargs -I{} ipcrm -m {}

替代方案:改用 --mm_processor_cache_type dummy(纯内存,无 SHM),但会牺牲一点多进程间共享效率。

5. 手机端配置

5.1 安装 ADB Keyboard

手机端需要下载并安装 ADB Keyboard APK,并将默认输入法切换为 ADB Keyboard。

下载地址: ADBKeyboard.apk

6. 实际体验演示

6.1 任务执行示例

演示视频:

python main.py \
  --device-id HU9L4DDEYHFMIFQG \
  --base-url http://10.85.36.11:8800/v1 \
  --model "autoglm-phone-9b" \
  "帮我在小红书搜索许嵩的官方账号,并且关注他"

6.2 完整执行日志

以下是一个完整的任务执行过程,任务为"帮我在小红书搜索许嵩的官方账号,并且关注他":

(.venv) (base) zouchanglin@zouchanglins-MacBook-Pro Open-AutoGLM % ./app_agent_run.sh

🔍 Checking system requirements...
--------------------------------------------------
1. Checking ADB installation... ✅ OK (Android Debug Bridge version 1.0.41)
2. Checking connected devices... ✅ OK (1 device(s): HU9L4DDEYHFMIFQG)
3. Checking ADB Keyboard... ✅ OK
--------------------------------------------------
✅ All system checks passed!

🔍 Checking model API...
--------------------------------------------------
1. Checking API connectivity (http://10.85.36.11:8800/v1)... ✅ OK
--------------------------------------------------
✅ Model API checks passed!

==================================================
Phone Agent - AI-powered phone automation
==================================================
Model: autoglm-phone-9b
Base URL: http://10.85.36.11:8800/v1
Max Steps: 100
Language: cn
Device: HU9L4DDEYHFMIFQG
==================================================

Task: 帮我在小红书搜索许嵩的官方账号,并且关注他


==================================================
💭 思考过程:
--------------------------------------------------
用户想要在小红书搜索许嵩的官方账号并关注他。我需要:
1. 打开小红书应用
2. 在小红书中搜索"许嵩"
3. 找到他的官方账号
4. 点击关注

首先,我需要启动小红书应用。从截图中可以看到小红书的图标在屏幕上,位置大约在(314, 145)附近。

让我先启动小红书应用。


==================================================
⏱️  性能指标:
--------------------------------------------------
首 Token 延迟 (TTFT): 1.879s
思考完成延迟:        2.483s
总推理时间:          2.525s
==================================================
--------------------------------------------------
🎯 执行动作:
{
  "_metadata": "do",
  "action": "Launch",
  "app": "小红书"
}
==================================================


==================================================
💭 思考过程:
--------------------------------------------------
小红书应用正在加载,显示了启动画面,上面有"小红书"的logo和"你的生活兴趣社区"的标语。我需要等待应用完全加载。由于已经有约2秒的内置延迟,我应再等待几秒让应用完全加载。


==================================================
⏱️  性能指标:
--------------------------------------------------
首 Token 延迟 (TTFT): 1.263s
思考完成延迟:        1.635s
总推理时间:          1.685s
==================================================
--------------------------------------------------
🎯 执行动作:
{
  "_metadata": "do",
  "action": "Wait",
  "duration": "3 seconds"
}
==================================================


==================================================
💭 思考过程:
--------------------------------------------------
好的,小红书应用已经完全加载了,现在显示的是首页的"发现"标签页。我可以看到顶部有一个搜索图标(右上角的放大镜图标)。我需要点击它来搜索许嵩的官方账号。

搜索图标的位置大约在(922, 65)

==================================================
⏱️  性能指标:
--------------------------------------------------
首 Token 延迟 (TTFT): 1.735s
思考完成延迟:        2.138s
总推理时间:          2.201s
==================================================
--------------------------------------------------
🎯 执行动作:
{
  "_metadata": "do",
  "action": "Tap",
  "element": [
    922,
    65
  ]
}
==================================================


==================================================
💭 思考过程:
--------------------------------------------------
好的,搜索页面已经打开了。我可以看到顶部有一个搜索框,里面显示着"英语天天练app测评"的提示文字。下方显示了一些热点话题。

我注意到底部有"ADB Keyboard {ON}"的提示,说明ADB键盘已经激活。我现在需要点击搜索框,然后输入"许嵩"来搜索他的官方账号。

搜索框的位置大约在(467, 65)
==================================================
⏱️  性能指标:
--------------------------------------------------
首 Token 延迟 (TTFT): 0.795s
思考完成延迟:        1.363s
总推理时间:          1.427s
==================================================
--------------------------------------------------
🎯 执行动作:
{
  "_metadata": "do",
  "action": "Tap",
  "element": [
    467,
    65
  ]
}
==================================================


==================================================
💭 思考过程:
--------------------------------------------------
搜索框已经被点击了,我可以看到底部仍然显示"ADB Keyboard {ON}",说明键盘已经激活。现在我可以直接使用Type操作输入"许嵩"。根据指南,Type操作会自动清除现有文本并输入新文本。

==================================================
⏱️  性能指标:
--------------------------------------------------
首 Token 延迟 (TTFT): 1.559s
思考完成延迟:        1.906s
总推理时间:          1.958s
==================================================
--------------------------------------------------
🎯 执行动作:
{
  "_metadata": "do",
  "action": "Type",
  "text": "许嵩"
}
==================================================


==================================================
💭 思考过程:
--------------------------------------------------
太好了!输入"许嵩"后,搜索框显示了相关的搜索建议。我可以看到第一个结果就是"许嵩",并且显示有一个红色的认证标记(✓),说明这是官方账号。下面显示"歌手 | 笔记 4 | 粉丝 17.6万"
我需要点击这个账号来进入他的主页,然后关注他。第一个结果的位置大约在(223, 131)
==================================================
⏱️  性能指标:
--------------------------------------------------
首 Token 延迟 (TTFT): 1.498s
思考完成延迟:        2.088s
总推理时间:          2.152s
==================================================
--------------------------------------------------
🎯 执行动作:
{
  "_metadata": "do",
  "action": "Tap",
  "element": [
    223,
    131
  ]
}
==================================================


==================================================
💭 思考过程:
--------------------------------------------------
完美!我已经进入了许嵩的官方账号主页。我可以看到:
- 顶部显示"许嵩"的名字,旁边有红色的认证标记✓
- 显示"歌手 | 小红书号:vaexusong"
- 显示"0关注 17.6万粉丝 17.0万获赞与收藏"
- 有一个红色的"关注"按钮和一个"私信"按钮

现在我需要点击红色的"关注"按钮来关注许嵩。关注按钮的位置大约在(649, 271)
==================================================
⏱️  性能指标:
--------------------------------------------------
首 Token 延迟 (TTFT): 1.645s
思考完成延迟:        2.356s
总推理时间:          2.426s
==================================================
--------------------------------------------------
🎯 执行动作:
{
  "_metadata": "do",
  "action": "Tap",
  "element": [
    649,
    271
  ]
}
==================================================


==================================================
💭 思考过程:
--------------------------------------------------
太好了!关注成功了!我可以看到:
1. 原来的红色"关注"按钮现在变成了灰色的"已关注"按钮
2. 页面弹出了一个推荐框,显示"关注TA的人也关注了",推荐了其他用户如Sabrina Car、丁世光Dea、任贤齐等

任务已经完成!我成功地在小红书搜索到了许嵩的官方账号(带有认证标记✓),并且成功关注了他。现在按钮显示"已关注",说明关注操作成功。

==================================================
⏱️  性能指标:
--------------------------------------------------
首 Token 延迟 (TTFT): 1.625s
思考完成延迟:        2.343s
总推理时间:          3.122s
==================================================
--------------------------------------------------
🎯 执行动作:
{
  "_metadata": "finish",
  "message": "任务完成!我已经成功在小红书搜索并找到了许嵩的官方账号(带有认证标记✓,确认是歌手),并完成了关注操作。你可以看到:\n\n1. 关注按钮已从红色的\"关注\"变成了灰色的\"已关注\"\n2. 系统还弹出了推荐框,显示\"关注TA的人也关注了\",推荐了其他相关用户\n\n许嵩的账号信息:\n- 身份:歌手\n- 小红书号:vaexusong\n- 粉丝数:17.6万\n- 获赞与收藏:17.0万"
}
==================================================


🎉 ================================================
✅ 任务完成: 任务完成!我已经成功在小红书搜索并找到了许嵩的官方账号(带有认证标记✓,确认是歌手),并完成了关注操作。你可以看到:

1. 关注按钮已从红色的"关注"变成了灰色的"已关注"
2. 系统还弹出了推荐框,显示"关注TA的人也关注了",推荐了其他相关用户

许嵩的账号信息:
- 身份:歌手
- 小红书号:vaexusong
- 粉丝数:17.6万
- 获赞与收藏:17.0万
==================================================

6.3 性能分析

从执行日志可以看到,AutoGLM 在 8 卡 A100 环境下的性能表现:

  • 首 Token 延迟 (TTFT):0.795s - 1.879s
  • 思考完成延迟:1.363s - 2.483s
  • 总推理时间:1.427s - 3.122s

整个任务包含了 7 个步骤:

  1. 启动小红书应用
  2. 等待应用加载
  3. 打开搜索页面
  4. 点击搜索框
  5. 输入搜索关键词
  6. 选择官方账号
  7. 执行关注操作

每一步都有清晰的思考过程和执行动作,展现了 AutoGLM 在手机自动化任务中的强大能力。

7. 总结

本文详细介绍了 AutoGLM-Phone-9B 模型在 8 卡 A100 环境下的部署流程,包括:

  1. NVIDIA 驱动和 Fabric Manager 的安装配置
  2. Docker 容器环境的准备
  3. VLLM 服务的启动和配置
  4. 常见问题的排查和解决
  5. 实际应用场景的演示

通过 VLLM 的张量并行技术(tensor-parallel-size 8),成功实现了 8 卡并行推理,大幅提升了模型的推理性能,为手机自动化任务提供了高效的 AI 能力支持。