详细教程展示用 AMD GPU 搭建本地 LLM 推理环境的完整配置步骤,支持 DIY 方案。
为什么要托管自己的大语言模型(LLM)?
虽然 VSCode 已经提供了许多优秀的 LLM,但托管自己的 LLM 具有多项优势,可以显著改善你的编程体验。下面列出了选择自行托管 LLM 的一些理由。
要自行托管大语言模型(LLM),你需要准备一些硬件和软件。
本教程使用的主机配置如下:
开始之前,你需要在 Linux 机器上安装所需的软件包。
无论你使用的是 Arch、Debian、Ubuntu 还是 Mint 等 Linux 发行版都没有关系。由于我们会使用容器,因此运行环境将保持一致。
需要注意的是,我们不会训练自己的 LLM 模型,而是专注于托管和运行预训练模型。这意味着你不需要用于模型训练的高性能 GPU 或专用硬件。
准备好这些前置条件后,就可以开始搭建 LLM 托管环境了!
我们将部署两个容器:一个用于运行 LLM 的 Ollama server,另一个用于部署 Open WebUI,让我们可以通过浏览器连接 Ollama server。
部署 Ollama 有两种方式:
如果你的 AMD GPU 支持 ROCm,只需运行 Ollama image 的 ROCm 版本即可。
docker run -d --restart always --device /dev/kfd --device /dev/dri -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama:rocm
如果你的 AMD GPU 不支持 ROCm,但性能足够强,仍然可以使用 GPU 运行 Ollama server。我使用下面的命令在 Radeon 6700 XT GPU 上运行 Ollama:
docker run -d --restart always --device /dev/kfd --device /dev/dri -v ollama:/root/.ollama -p 11434:11434 --name ollama -e HSA_OVERRIDE_GFX_VERSION=10.3.0 -e HCC_AMDGPU_TARGET=gfx1030 ollama/ollama:rocm
如果使用下面的命令运行 ollama image,Ollama 将使用计算机的内存和 CPU 启动。
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
部署 Ollama 容器后,可以手动检查 Ollama server 是否已成功运行。
docker exec ollama ollama list
此时列表中不会显示任何 LLM,因为我们还没有下载模型。
接下来,我们将部署 Open WebUI,然后通过 Web 浏览器开始使用 Ollama。
由于 Ollama 容器正在监听宿主机的 TCP 11434 端口,因此可以像下面这样运行 Open WebUI:
docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main
容器启动后,如果 Open WebUI 运行在你自己的计算机上,可以在浏览器中访问 http://localhost:8080。如果它运行在另一台计算机上,则可以通过 http://ip-address-or-domain:8080 从浏览器访问 Open WebUI。
Ollama 提供了可以直接通过 Ollama server 使用的 LLM。要查看全部模型,可以前往 Ollama Library。
由于我的 GPU 拥有 12GB 显存,因此我会运行以下模型:
名称:deepseek-coder:6.7b-instruct-q8_0,大小:7.2GB。我大多数时候都会使用这个 LLM 来满足编程需求。
名称:llama3:8b-instruct-q8_0,大小:8.5GB。编写邮件等内容时,我会使用这个 LLM 进行对话。
名称:deepseek-coder:33b-instruct-q4_0,大小:18GB。面对有挑战性的编程需求时,我会使用这个 LLM。
你可以把 LLM 名称粘贴到红色方框中,以拉取对应的 LLM image。
如果想了解 AI 的运行表现,可以点击 AI 回复消息上的 i 按钮进行查看。
第一次向某个 LLM 发送消息时,加载所选模型需要几秒钟。如下所示,该 LLM 花费了 9 秒完成加载,随后用 1 秒生成了回答。
第一条消息之后的其他消息不再需要耗费这段加载时间。
如下所示,它在 0.5 秒后开始回复,生成完整答案总共花费了 7.7 秒。
如果想确认 LLM 实际运行在哪里,还可以查看 GPU 的运行状态。
对于 AMD GPU,可以使用 radeontop。
对于 Nvidia GPU,可以使用 nvidia-smi。
下面是 prompt 运行期间,我的 radeontop 命令输出: