尧图精选

AMD ROCm云实例15分钟部署Gemma4开源模型实战

🕒 发布时间:2026/10/2 4:48:08 📁 来源:尧图网络
先交代背景。一直在做开源大模型部署相关的事手头的项目经常需要把各种开源权重跑起来N 卡好是好但价格和显存卡的太狠了所以我对 AMD 的路线一直有关注。这次跟着 Datawhale 和 AMD 的活动在云上开了一台带 ROCm 环境的 AMD 实例目标是 15 分钟内把 Gemma4 部署出来。Gemma4 是 Gemma 系列最近一版开源权重我不打算吹它的榜单成绩我更关心的是它能不能在 AMD ROCm 云实例上快速跑起来。说实话看到“15 分钟”这个时间预算一开始我是有点怀疑的。毕竟只要在本地部署过大模型的人都懂这一路上光是装驱动、配环境、拉权重任何一个环节报错都能轻松吃掉一下午。但既然这次任务就是“把 AMD ROCm 云实例挖个底朝天”我就认认真真开了一台实例从控制台到跑通 API 全部走了个遍。结论先放这里15 分钟部署到能聊天是真的做得到的但前提是你走对的路线、踩对的前提条件一个都不能少。这篇就把我的完整操作、选型逻辑、踩过的坑和最后的优化方案全部写下来。无论你现在想部署的是 Gemma、DeepSeek、Qwen 还是其他开源模型这套流程基本可以无脑平移。1. 先回答那个最关键的问题15 分钟到底靠不靠谱1.1 为什么大多数人会觉得“15 分钟部署”是标题党“本地部署大模型”这几个字这两年都快被说烂了但真正想跑通一套服务拆开来看其实是一长串步骤装显卡驱动、装 ROCm 计算库、装 Python 推理环境、下载模型权重、启动推理框架、调显存和 KVCache、开端口接 API。任何一个步骤报错等待你的就是以小时计的排查时间。尤其是 AMD 的 ROCm 生态社区里一直流传着一句话安装两小时部署五分钟。以前的 ROCm 确实是出了名的难伺候驱动要手动匹配内核版本PyTorch 要装特定的 nightly 版本很多开源模型推理框架对 AMD 的支持也不完整。所以当我看到“15 分钟部署”这个目标时第一反应是真的觉得不靠谱。但这一次不一样。我仔细拆了一下整个部署链路发现 15 分钟这个数字不是拍脑袋吹出来的而是把流程压缩到极致后的真实时间预算。关键就在于“复用现成环境”而不是“从零开始配置”。1.2 我把流程拆成四段发现确实塞得下先看整体时间分布我会在后面的章节里把每一段具体怎么操作都写清楚。时间段做的事情耗时0-2 分钟在云平台开通实例选择预装 ROCm 的镜像2 分钟2-4 分钟登录后做环境自检确认 GPU 直通和 ROCm 设备节点正常2 分钟4-13 分钟安装 Ollama拉取 Gemma4 的量化权重启动推理服务9 分钟13-15 分钟启动 Open WebUI 容器浏览器打开可视化面板完成2 分钟这个时间线能成立核心秘密有三个第一实例镜像里已经预装了 ROCm 运行时我不用自己碰驱动和底层库第二模型权重用的是现成的 GGUF 量化版不需要现场拿原始权重去转换第三推理框架用的是 Ollama 这种自动适配 ROCm 后端的工具安装完直接就能用。1.3 三个前提条件缺一个时间就要翻倍先说结论如果你不满足下面三个条件那“15 分钟部署”确实就是不靠谱的标题党。我在这次实操中把每一个假设都验证过一遍。第一个前提实例镜像里必须有 ROCm 运行时。如果云平台给你的是裸 Ubuntu 系统光安装 ROCm 工具链和依赖库就要花掉半个多小时这还没算驱动和内核模块的适配问题。所以选实例的时候“预装 ROCm 环境”这个选项几乎是必须的。第二个前提模型必须是现成的量化权重。Gemma4 这种规模的模型原始 FP16 权重几十个 GB就算下载下来推理时显存开销也是巨大的。量化后的 GGUF 格式权重比如 Q4_K_M 级别体积能少一半以上而且 Ollama 这类框架直接支持不需要你做任何格式转换。第三个前提不要自己写推理脚本。我看到不少新手喜欢照着 HuggingFace 的 Transformers 示例代码往上冲装一堆 Python 依赖、处理 tokenizer、写生成循环一套下来调试时间根本无法估计。直接用 Ollama 或者 vLLM 这类成熟框架把部署问题收敛到 API 层面快得多。为什么我会坚持选 AMD 而不是老老实实去租 N 卡这里也顺带说清楚。现在公共云上的 N 卡实例价格已经到了一种离谱的程度特别是大显存型号按小时计费都能让人肉疼。而 AMD 的云实例往往用同样的预算能拿到更大的显存对跑中等规模开源模型来说显存就是硬通货。ROCm 生态经过这几年的补课PyTorch、Ollama、vLLM 这些核心工具都已经有了官方支持很多基于 CUDA 的部署教程只需要改几个环境变量就能平移过来。可以说现在已经到了认真考虑 AMD 路线的合适时间节点。2. 选实例显存、镜像、磁盘哪一个都不能拍脑袋2.1 先算显存账不然实例开下来也是白开部署大模型的硬门槛永远是显存。Gemma4 这种规模的模型如果跑 FP16 原始精度单是权重就能把几十 GB 显存吃掉再加上 KVCache 和运行时开销显存压力非常大。所以实际部署时基本都是走量化路线。一般来说显存的最低需求可以用这个粗略公式估算显存需求约等于 权重大小乘以 1.2再加上 2GB 左右的上下文缓冲最后再多留 20%-30% 余量。举个例子如果某个模型量化后权重是 16GB那么最稳的显存配置大概需要 25GB 以上。我这次开的实例是单卡 64GB 显存的 AMD 实例跑的是 4-bit 量化权重上下文默认 8K整个过程非常宽松。如果你的预算是 32GB 显存的实例跑 7B-14B 量级的量化模型也没有问题但再往上就建议用更小的量化位宽或者降低上下文长度。这里必须多说一句显存永远不嫌多。很多人只盯着权重大小看忽略了上下文长度和并发请求数都会显著扩大显存占用。尤其是 OpenAI 兼容 API 一开多个人同时提问的时候每个请求都会独立占一块 KVCache显存水位直接被拉起来。预算允许的话尽量往大显存选。2.2 系统镜像怎么选决定了你后面是 5 分钟还是 50 分钟选实例的时候系统镜像和 GPU 型号是同等重要的决策点。我的建议是优先选择云平台提供的“预装 ROCm”镜像其次选择官方推荐的 ROCm Docker 镜像。不要为了“干净”去选裸系统后面所有环境问题都会变成你自己的时间黑洞。ROCm 的版本也要注意和卡型匹配。AMD 的 MI200 系列对应 gfx90a 架构MI300 系列对应 gfx942 架构消费级的 RX 7000 系列则是 gfx1100 等编号。不同 ROCm 版本对架构的支持程度不一样如果版本和卡型不对齐常见的报错就是驱动加载不了或者 HSA 层初始化失败后面全是乱码式的错误信息。可以把 ROCm 理解成“AMD 的驱动加计算库全家桶”它的版本会直接影响设备节点、运行时库和框架层的兼容性。云平台预置镜像一般已经帮你把匹配关系处理好了直接选最高版本的预装镜像通常没错。2.3 磁盘和网络往往才是 15 分钟计划的真正风险点很多人把注意力全放在 GPU 上结果部署时卡在了磁盘和网络这两个不起眼的环节。模型权重下载是整个流程中耗时最多的一段如果实例系统盘只有几十 GB拉一个几十 GB 的模型下去磁盘满了直接前功尽弃。系统盘至少要有 100GB 可用空间最好再配一个独立的数据盘。我这次的做法是先把 Ollama 的模型目录软链到数据盘避免把系统盘写满。具体命令很简单mkdir -p /data/ollama ln -sfn /data/ollama /root/.ollama注意执行时机一定要在安装 Ollama 和拉取模型之前做否则模型已经下到系统盘再迁移就是浪费时间。网络方面如果你的网络环境访问模型仓库速度不理想最有效的办法是先配置国内可用的镜像源或者直接选择云平台上带有“模型缓存”的实例把下载时间直接从分钟级压到秒级。3. 开机后的四步自检先确认你拿到的 AMD 实例真的能用3.1 第一步用 lspci 确认 GPU 是否真的直通进来了拿到实例后我做的第一件事不是急着装东西而是先做环境自检。这一步非常关键它可以帮你把后面所有的失败收敛到“模型层”而不是“环境层”。第一步是确认 GPU 设备是否真的透传到了这台虚机。执行lspci | grep -i amd正常情况下输出里能看到类似“Advanced Micro Devices, Inc. [AMD]”的条目对应 VGA 兼容控制器或 3D 控制器。如果你执行完完全没有输出那就说明 GPU 并没有成功直通进来常见原因就两个云平台的 GPU 直通设置有问题或者 amdgpu 内核模块没有加载。有人经常会在这步卡住看到无反应就以为是驱动没装实际上先要确认硬件层面的设备能看到。如果 lspci 能看到 GPU 但系统提示驱动模块没加载可以尝试modprobe amdgpu执行完再看一次设备节点就能确认内核层是否已经把 AMD 驱动挂载起来了。3.2 第二步检查 ROCm 依赖的设备节点ROCm 底层依赖两个设备路径一个是 /dev/kfd一个是 /dev/dri 目录。执行ls -l /dev/kfd /dev/dri正常情况下/dev/kfd 会存在/dev/dri 目录下会有 card0、renderD128 这类条目。/dev/kfd 是 ROCm 跟内核交互的核心接口如果这个路径不存在说明 ROCm 的内核层没有起来HSA 应用全部都会报错。如果只看到 /dev/dri 而没有 /dev/kfd驱动加载了一半的迹象很明显。3.3 第三步用 rocminfo 确认你的 gfx 架构编号如果前面两步都正常接着用 rocminfo 看详细架构信息rocminfo | grep gfx输出里会出现类似 gfx90a、gfx942、gfx1100 这样的编号。记住这个编号它对你后面排错特别重要。因为某些 ROCm 版本对特定架构没有内置二进制支持部署时如果报“is not supported by current ROCm”就可以用这个编号去做兼容覆盖我在第 5 章会详细讲。3.4 第四步用 rocm-smi 确认显存和温度最后用 rocm-smi 看一下显存、温度和功耗状态rocm-smi正常情况下能看到显卡的显存总量、当前占用、温度、功耗等数据。如果显存信息读不出来或者温度数据明显异常说明传感器或驱动层有问题。把自检结果整理一下方便对号入座检查项使用命令正常状态异常处理思路GPU 设备lspci | grep -i amd能看到 AMD GPU 条目检查平台直通设置或 modprobe amdgpu设备节点ls -l /dev/kfd /dev/drikfd 存在dri 目录完整确认 ROCm 内核模块加载情况架构编号rocminfo | grep gfx能输出 gfx 编号编号缺失说明 ROCm 层初始化失败显存状态rocm-smi能看到显存容量和温度读不到数据优先排查驱动加载四步自检都过了后面部署就踏实了。如果哪一步出问题强烈建议在控制台层面调整完实例配置再继续而不是耗在系统里打地鼠。4. 15 分钟部署实录Ollama Gemma4 Open WebUI 一条龙4.1 为什么首选 Ollama环境确认没问题后正式进入部署环节。我这次的第一选择是 Ollama没有自己写 Python 推理脚本。原因有三个。第一Ollama 在 Linux 上安装后会自动检测 AMD GPU 并启用 ROCm 后端不需要我手动处理复杂的编译参数第二Ollama 的模型仓库直接提供各类开源模型的 GGUF 量化权重拉下来就能跑第三它自带 OpenAI 兼容 API后面接什么工具都方便。安装和启动命令非常简单curl -fsSL https://ollama.com/install.sh | sh ollama serve 然后拉取 Gemma4 的权重。我这次拉的是官方默认的较大指令版本如果你的显存比较紧张可以拉更小尺寸或者更极端的量化位宽。模型标签以 Ollama 仓库里实际显示的为准不同版本命名会略有差异但流程完全一样。ollama pull gemma4拉完之后用交互模式验证一下ollama run gemma4直接在命令行里输入问题能出回答说明模型已经跑起来了。如果你习惯用 APIOllama 默认监听在 11434 端口可以直接用 curl 测curl http://localhost:11434/api/generate -d {model: gemma4, prompt: 你好用一句话介绍你自己}我实测下来的生成速度大致在每秒 40 到 60 个 token 之间首次返回延迟 1 到 2 秒这个体感已经很接近商业 API 在轻负载场景下的表现了。4.2 Docker 部署 Ollama 的备选姿势如果你不想污染宿主机环境用 Docker 化部署也完全可行。AMD 容器和 N 卡容器有一个关键区别N 卡环境通常要加 --gpus all但 AMD 环境走的是设备透传必须显式指定 /dev/kfd 和 /dev/dri。正确的启动方式是docker run -d \ --name ollama-rocm \ --device/dev/kfd \ --device/dev/dri \ -v /data/ollama:/root/.ollama \ -p 11434:11434 \ ollama/ollama:rocm把数据目录挂载到 /data/ollama这样模型和容器生命周期解耦删容器也不会丢权重。这一步我专门列出来是因为太多人拿着 N 卡的习惯来跑 AMD 容器上来就加 --gpus all结果设备透传根本没生效服务一直报找不到 GPU。4.3 把可视化面板挂上去Open WebUI模型跑通命令行之后下一步当然是要有个好看的聊天界面。Open WebUI 是目前最主流的开源可视化方案跟 Ollama 配合得非常好这一步本质就是起一个 Docker 容器然后把 Ollama 的地址告诉它。docker run -d \ -p 3000:8080 \ -e OLLAMA_BASE_URLhttp://host.docker.internal:11434 \ --add-host host.docker.internal:host-gateway \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:main浏览器打开宿主机的 3000 端口注册一个本地账号进去之后在模型选择列表里选中 Gemma4就能像用 ChatGPT 一样开始对话了。整个操作不到两分钟可视化问题算是彻底解决。到这里15 分钟的时间线是完全成立的。我实测从实例开通到 Open WebUI 界面能聊天整个过程就是 15 分钟左右前提是模型仓库下载速度快。5. 踩坑实录这四个问题任何一个都能吃掉你的 15 分钟5.1 显卡不被 ROCm 识别HSA_OVERRIDE_GFX_VERSION 的用处第一个高发问题是 Ollama 启动后报错提示当前架构不受 ROCm 支持。现象大概长这样amdgpu: gfx1100 is not supported by current ROCm为什么会出现这个问题因为 ROCm 的运行时库里针对不同 gfx 架构的预编译二进制不是全量包含的某些消费级显卡或比较新的架构不在预编译列表里。解法是设置一个兼容覆盖变量export HSA_OVERRIDE_GFX_VERSION11.0.0注意这个 11.0.0 不是固定的要按你第 3 章自检时看到的实际 gfx 编号来填。比如 gfx900 系列填 9.0.0gfx1100 系列填 11.0.0。设完环境变量后重启 Ollama 服务就能识别到 GPU。这里要特别提醒这个变量是覆盖底层架构检测逻辑不是万能钥匙。能跑起来不代表性能最优但至少解决了“完全用不了”的问题。5.2 报错不是 CUDA OOM而是 HSA 内存分配失败第二个坑和显存有关但报错信息和 CUDA 生态完全不同。跑长上下文或多轮对话时服务可能直接挂掉日志里出现类似 HSA_STATUS_ERROR_OUT_OF_RESOURCES 的信息。第一次见这种错误容易懵因为它不像 CUDA OOM 那么直白。原因分析下来基本就是 KVCache 把显存吃满了。模型权重之外每一条对话的上下文都会占用显存上下文长度越长、并发请求越多KVCache 的占用就越大。解决思路也比较直接降低并发数缩短上下文长度。Ollama 可以通过环境变量控制export OLLAMA_CONTEXT_LENGTH8192设置完重启服务问题就消失了。如果你用的是 vLLM那就调 --max-model-len 参数道理一样。5.3 模型权重下载卡住数据盘和镜像源缺一不可第三个坑发生在拉权重的环节。几十 GB 的模型文件下载时间长还能忍就怕下到一半断掉又要重新来。而且如果你把模型默认放在了系统盘下载过程中系统盘空间被写满整个实例都可能变得不可用。我的做法是先把模型目录软链到数据盘这一步在第 2 章已经写过。网络方面的优化主要是选择访问速度更快的镜像源。如果你部署的任务对时效性要求很高直接在云平台选一台带模型缓存的实例是最省事的。5.4 重启实例后 GPU 设备消失驱动模块没随开机加载第四个问题发生在一次实例重启之后。当时 lspci 能看到 GPU但是 /dev/kfd 不见了Ollama 服务自然起不来。查了一圈发现amdgpu 内核模块没有随开机自动加载。解法是把驱动模块写进系统的模块加载配置里echo amdgpu /etc/modules-load.d/amdgpu.conf保存后重启验证一次确认 /dev/kfd 正常出现。这个问题很隐蔽因为你不是每次重启都会留意设备节点状态一旦没注意后面排查环境问题会花上很多时间。踩过这些坑之后我养成一个习惯把部署时的关键版本号全部记录下来。Ollama 版本、ROCm 版本、模型标签、HSA_OVERRIDE_GFX_VERSION 的值写进一个 README 文件下次再部署直接按图索骥避免重复踩雷。6. 从“能跑”到“跑得爽”vLLM 与部署模板固化6.1 什么时候需要从 Ollama 换到 vLLMOllama 对个人调试和轻量并发已经够用但如果你的目标是把模型服务化接 API 给团队或者项目用Ollama 就会开始显得吃力。高并发场景下vLLM 凭借更高效的显存管理机制能做到更高的吞吐量。vLLM 对 ROCm 的支持这几年进步很明显官方仓库直接提供 ROCm 镜像部署逻辑和 CUDA 版本几乎一致唯一需要注意的就是设备透传方式。6.2 vLLM for ROCm 的完整部署命令先拉取 ROCm 版本的 vLLM 镜像然后启动服务docker run -d \ --name vllm-rocm \ --device/dev/kfd \ --device/dev/dri \ -v /data/models:/models \ -p 8000:8000 \ vllm/vllm-openai:rocm \ python -m vllm.entrypoints.openai.api_server \ --model /models/gemma4 \ --dtype bfloat16 \ --max-model-len 8192 \ --gpu-memory-utilization 0.9 \ --port 8000这里再次强调不要加 --gpus allAMD 环境的设备透传靠的是 --device/dev/kfd 和 --device/dev/dri。服务起来后用 OpenAI 兼容接口验证curl http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d {model: /models/gemma4, messages: [{role: user, content: 你好}]}并发压测的话可以直接用 wrk 这类工具对 8000 端口打请求。实测下来同样 8 个并发请求Ollama 会开始排队vLLM 则能把显存空闲空间吃满吞吐差距非常明显。对比项OllamavLLM上手难度极低一条命令装完中等需要 Docker 和设备透传概念适用场景个人调试、轻量并发服务化 API、高并发显存效率常规通过连续批处理机制占明显优势可视化配合 Open WebUI同样配合 Open WebUI6.3 把环境固化成模板快照和初始化脚本部署完一轮之后我强烈建议你会回云平台创建镜像快照。这样下次需要再开一台实例时直接选择自定义镜像ROCm、Ollama、模型权重全都一步到位恢复时间通常也就几分钟比重新部署快得多。如果想更进一步可以写一个初始化脚本放到数据盘。脚本内容不复杂#!/bin/bash # AMD ROCm 实例初始化 modprobe amdgpu mkdir -p /data/ollama ln -sfn /data/ollama /root/.ollama export HSA_OVERRIDE_GFX_VERSION11.0.0 export OLLAMA_CONTEXT_LENGTH8192 ollama serve ollama pull gemma4 docker run -d -p 3000:8080 \ -e OLLAMA_BASE_URLhttp://host.docker.internal:11434 \ --add-host host.docker.internal:host-gateway \ --name open-webui --restart always \ ghcr.io/open-webui/open-webui:main把脚本保存成 setup.sh每台新实例开机后执行一遍人就可以离开了回来就是一个可以直接用的环境。这种做法对于经常要反复开实例的人特别有用。6.4 最后几句真心话这次 AMD ROCm 云实例的完整体验比我预想的要顺滑。ROCm 生态前几年的确有不少粗糙的地方但现在文档、框架支持和社区活跃度都已经提升了很多至少在“把开源模型跑起来”这件事上AMD 不该被直接排除在选项之外。如果你是从零开始我的建议是先别急着上 vLLM。先拿 Ollama 把流程跑通让模型能说话再去纠结吞吐和并发。不要一上来就把环境搞得太复杂部署这件事稳定压倒一切。另外记住一点这套流程对 Gemma 系列适用对 DeepSeek、Qwen 等开源模型同样适用。本质上就是“GGUF 权重加 ROCm 推理框架”的组合换模型只是换一个拉取标签的问题。真正值钱的不是某条命令而是排查问题的那套思路。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →