Windows 使用 Docker + WSL2 部署 Ollama(AMD 显卡推理)搭建手册
Windows 使用 Docker + WSL2 部署 Ollama(AMD 显卡推理)搭建手册
手册目标
在 Windows 11 上通过 Docker + WSL2 调用 AMD 显卡运行 Ollama 推理服务。
实现 低延迟、高性能的本地模型推理,同时不影响 Windows 正常使用。
标记为搭建过程中遇到的很重要问题!!
一、系统要求与准备工作
硬件要求
- ✅ AMD RX 6000/7000系列显卡(需支持ROCm 5.7+)
- ✅ 内存 ≥16GB(建议为WSL2分配≥8GB)
- ✅ 存储空间 ≥20GB
软件要求
- 🖥️ Windows 11 22H2或更高版本
- 🔗 AMD显卡驱动下载
二、环境配置流程
1. 启用WSL2
以管理员身份打开 PowerShell,运行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启计算机。
2 设置 WSL2 为默认版本
wsl --set-default-version 2
3. 安装 Ubuntu 22.04
打开 Microsoft Store,搜索并安装 Ubuntu 22.04 LTS。
启动 Ubuntu,设置用户名和密码。
也可以通过wsl --install XXX安装,但是需要注意版本,后续的显卡驱动需要与之对应!
目前发现仅 ROCm 6.1.3 版本对应的AMD 显卡 Linux 驱动(修订号 24.10.3)仓库中包含了 WSL2 支持所需的 两个 deb 包:hsa-runtime-rocr4wsl-amdgpu 和 rocminfo4wsl-amdgpu,前者为 AMD 实现的异构系统架构(Heterogeneous System Architecture,HSA)运行时,也称 ROCm 运行时(ROCR),提供直接利用 AMD 显卡计算能力的用户态 API。后者为 rocminfo 工具,用于报告系统信息,可枚举工作 ROCm 栈中的 GPU 代理(agents)。
**如果后续安装PyTorch需要将驱动提供的 libhas-runtime64.so 替换掉 torch 中自带的同名文件,否则会在调用显卡时报错 RuntimeError: No HIP GPUs are available **
== 也就是说 其他版本可能会导致WSL2检测不到AMD显卡 ==

三、安装 Docker Desktop 并集成 WSL2
1. 下载并安装 Docker Desktop
访问 Docker 官网 下载安装包。
安装时勾选 Enable WSL 2-based engine 和 Integrate with Windows Subsystem for Linux。
2. 配置 Docker 使用 WSL2
打开 Docker Desktop 设置,进入 Resources → WSL Integration:
启用 Enable integration with my default WSL distro。
选择已安装的 Ubuntu 22.04。
四、配置 AMD 显卡驱动与 ROCm
1. 在 WSL2 中安装 ROCm
== 注意驱动版本 ==
在 Ubuntu 终端中运行:
sudo apt update
wget https://repo.radeon.com/amdgpu-install/6.1.3/ubuntu/jammy/amdgpu-install_6.1.60103-1_all.deb
sudo apt install ./amdgpu-install_6.1.60103-1_all.deb
2. 验证 GPU 识别
== 如果rocminfo 命令不存在,或没有返回信息,需要检查驱动版本(24.10.3)==
rocminfo # 应输出显卡型号(如 gfx1100)
五、构建并运行 Ollama Docker 容器
1. 创建 Dockerfile
在 Ubuntu 中新建目录并创建 Dockerfile:
mkdir ollama-amd && cd ollama-amd
nano Dockerfile
输入以下内容:
FROM ubuntu:22.04
RUN apt update && apt install -y curl
RUN curl -fsSL https://ollama.ai/install.sh | sh
EXPOSE 11434
CMD ["ollama", "serve"]
2. 构建镜像
docker build -t ollama-amd
3. 启动容器并映射 GPU
docker run -d \--name ollama \--gpus=all \--device=/dev/kfd \--device=/dev/dri \-p 11434:11434 \ollama-amd
六、验证服务与性能测试
1. 检查容器状态
docker logs ollama # 应显示 "Listening on 0.0.0.0:11434"
2. 在 Windows 中调用推理服务
安装 Python 并运行以下脚本:
import requests
response = requests.post("http://localhost:11434/api/generate",json={"model": "llama2", "prompt": "Hello, how are you?"}
)
print(response.text)
3. 性能测试(RX 7900 XTX)
| 模型 | 推理速度 (tokens/s) | 显存占用 |
|---|---|---|
| Llama2-7B | 28 | 20GB |
| CodeLlama-34B | 9 | 24GB |
七、优化配置
1. 调整 WSL2 内存限制
在 Windows 用户目录创建 .wslconfig 文件:
memory=16GB # 分配 16GB 内存给 WSL2
processors=8 # 分配 8 个 CPU 核心
2. 启用混合精度推理
docker exec -it ollama ollama run llama2 --gpu-layers 32 --precision fp16
八、常见问题解答
Q1:ROCm 安装失败,提示依赖错误
解决:更新系统并重试:
sudo apt update && sudo apt upgrade -y
Q2:容器启动报错 Failed to initialize GPU
解决:检查显卡驱动是否支持 ROCm 5.7,并重新绑定设备:
docker run ... --device=/dev/dri/renderD128 # 添加此参数
总结
通过本手册,您已成功在 Windows 上部署了基于 AMD 显卡的 Ollama 推理服务,并实现了:
- GPU 加速推理:接近原生 Linux 性能。
- 无缝开发体验:在 Windows 中直接调用 localhost:11434 进行模型测试。
- 资源隔离:WSL2 容器与 Windows 系统资源互不影响。
附:操作流程图
Windows 11
│
├─ WSL2 (Ubuntu 22.04)
│ ├─ Docker Engine
│ │ └─ Ollama 容器(绑定 AMD 显卡)
│ └─ ROCm 5.7
│
└─ 本地应用(Python/Postman)└─ 调用 http://localhost:11434
WSL命令:
wsl --list
wsl --list --verbose
wsl --install xxx # 不指定版本会安装最新的#删除子系统
wsl --shutdown # 强制关闭所有正在运行的子系统 :ml-citation{ref="1,5" data="citationList"}
wsl --list --verbose # 确认子系统状态为 "Stopped" :ml-citation{ref="1,2" data="citationList"}
wsl --unregister <子系统名称> # 例如:wsl --unregister Ubuntu-24.04 :ml-citation{ref="1,2" data="citationList"}
#删除 \AppData\Local\Packages\<子系统文件夹> 下文件
启动 WSL:
wsl:不带参数时,将启动默认的 Linux 发行版。
wsl -d :指定要启动的 Linux 发行版名称。
列出 Linux 发行版:
wsl --list 或 wsl -l:列出所有已安装的 Linux 发行版。
wsl --list --online 或 wsl -l -o:列出可以从 Microsoft Store 安装的在线 Linux 发行版。
wsl --list --verbose 或 wsl -l -v:显示详细的发行版列表,包括发行版的状态和使用的 WSL 版本(1 或 2)。
设置默认的 Linux 发行版:
wsl --setdefault :设置指定的 Linux 发行版为默认启动项。
卸载 Linux 发行版:
wsl --unregister :卸载指定的 Linux 发行版。
更新 WSL:
WSL 的更新通常通过 Windows 更新或 Microsoft Store 来完成。
检查 WSL 状态:
可以通过运行 wsl 命令并观察输出,或者查看 Windows 功能列表中的 WSL 相关项来检查 WSL 是否已正确安装和配置。
跨系统文件访问:
WSL 允许在 Windows 和 Linux 文件系统之间访问文件,但出于性能考虑,建议将文件存储在 WSL 文件系统中。
运行 Linux GUI 应用:
WSL 2 支持运行 Linux GUI 应用程序(如 X11 和 Wayland 应用),但这通常需要额外的配置,如安装 X 服务器软件(如 VcXsrv、Xming 或 Windows 自带的 WSLg)。1
相关文章:
Windows 使用 Docker + WSL2 部署 Ollama(AMD 显卡推理)搭建手册
Windows 使用 Docker WSL2 部署 Ollama(AMD 显卡推理)搭建手册 手册目标 在 Windows 11 上通过 Docker WSL2 调用 AMD 显卡运行 Ollama 推理服务。 实现 低延迟、高性能的本地模型推理,同时不影响 Windows 正常使用。 标记…...
视频提取硬字幕,字幕擦除,字幕翻译工具推荐
背景 最近有一些视频短剧资源,要提取视频中的硬字幕,并把中文字幕翻译成为英文,找了好些工具,都不是特别的理想。偶然间发现个平台, 灵犀AI,平台上介绍是主打视频硬字幕提取,擦除,多…...
table 拖拽移动
表格拖拽 Sortable.js中文网|配置 <!-- 教务处 --><template><div class"but"><el-button click"mergeAndPrintArrays()" type"primary">保存数据</el-button><el-button click"restoration()" t…...
软件工程---软件测试
软件测试是指在软件开发过程中,通过一系列的测试活动来评估和验证软件系统或应用程序的质量。它是一种用于发现和修复软件缺陷、错误和问题的过程,旨在确保软件能够满足其预期功能、性能和安全需求。 软件测试分类 软件测试可以按照多个维度进行分类&a…...
快速高效使用——阿里通义万相2.1的文生图、文生视频功能
前言:你仅需提供简单的几个提示词,即可快速高效帮你生成更为丰富的提示词并生成满意的图片或者视频。无论是为了创作艺术作品、设计商业宣传素材,还是满足个人兴趣爱好等,都能快速将脑海中的想法转化为逼真的图片或生动的视频。 目…...
量子算法:英译名、概念、历史、现状与展望?
李升伟 整理 #### 英译名 量子算法的英文为 **Quantum Algorithm**。 #### 概念 量子算法是利用量子力学原理(如叠加态、纠缠态和干涉)设计的算法,旨在通过量子计算机高效解决经典计算机难以处理的问题。其核心在于利用量子比特(…...
厦门大学第3弹:DeepSeek大模型及其企业应用实践(150页PPT,企业人员的大模型宝典)
本报告由厦门大学大数据教学团队制作,由林子雨副教授主讲,旨在为企业人员提供一份关于大模型技术及其应用的科普资料。从大模型的基本概念出发,详细介绍了其发展历程、分类方式以及与人工智能的关系,重点探讨了大模型在企业中的多…...
Qt显示一个hello world
一、显示思路 思路一:通过图形化方式,界面上创建出一个控件显示。 思路二:通过编写C代码在界面上创建控件显示。 二、思路一实现 点开 Froms 的 widget.ui,拖拽 label 控件,显示 hello world 即可。 qmake 基于 .…...
[LeetCode]day33 150.逆波兰式求表达值 + 239.滑动窗口最大值
逆波兰式求表达值 题目链接 题目描述 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运…...
线代[9]|线性代数主要内容及其发展简史(任广千《线性代数的几何意义》的附录1)
文章目录 向量行列式矩阵线性方程组二次型 向量 向量又称为矢量,最初应用与物理学。很多物理量如力、速度、位移以及电场强度、磁感应强度等等都是向量。大约公元前350年前,古希腊著名学者亚里士多德就知道了力可以表示成向量,两个力的组合作…...
庖丁解java(一篇文章学java)
(大家不用收藏这篇文章,因为这篇文章会经常更新,也就是删除后重发) 一篇文章学java,这是我滴一个执念... 当然,真一篇文章就写完java基础,java架构,java业务实现,java业务扩展,根本不可能.所以,这篇文章,就是一个索引,索什么呢? 请看下文... 关于决定开始写博文的介绍 …...
人工智能之数学基础:n阶行列式
本文重点 前面的一个章节中,我们学习了2阶行列式和3阶行列式,本节课程我们将学习n阶行列式,在学习这个之前,我们需要学习一些准备的知识。 n级排列 现在有三个数1,2,3那么这三个数有多少种排列方式呢? 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 如上所示一共…...
Hive 3.1 在 metastore 运行的 remote threads
Remote threads 是仅当 Hive metastore 作为单独的服务运行是启动,请求需要开启 compactor。 有以下几种: 1. AcidOpenTxnsCounterService 统计当前 open 的事务数 从表 TXNS 中统计状态为 open 的事务。此事务数量可以再 hive metrics 中。 2. Acid…...
FFmpeg-chapter3和chapter4-读取视频流(原理篇和实战篇)
ffmpeg网站:About FFmpeg 1 库介绍 (1)libavutil是一个包含简化编程函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 (2)libavcodec是一个包含音频/视频编解码器的解码器和编…...
音频3A测试--AEC(回声消除)测试
一、测试前期准备 一台录制电脑:用于作为近段音源和收集远端处理后的数据; 一台测试设备B:用于测试AEC的设备; 一个高保真音响:用于播放设备B的讲话; 一台播放电脑:用于模拟设备A讲话,和模拟设备B讲话; 一台音频处理器(调音台):用于录制和播放数据; 测试使用转接线若…...
Unity插件-Mirror使用方法(一)Mirror介绍
目录 一、使用介绍 二、插件介绍 1、简述 2、核心功能与特点 基于组件的高层抽象 服务器-客户端架构 序列化与同步 可扩展性与灵活性 跨平台支持 社区与生态 3、典型应用场景 4、基本使用示例 安装 设置 NetworkManager 同步变量与 RPC 5、优缺点对比 6、为什…...
Markdown HTML 图像语法
插入图片 Markdown 一般来说,直接复制粘贴过来就行了,部分网页/应用可以拖拽,没人会真敲图片的链接吧…… 示例图片: 2.5 系统调用和库函数概念 3. 进程简述3.1 基本概念3.…...
详细分析KeepAlive的基本知识 并缓存路由(附Demo)
目录 前言1. 基本知识2. Demo2.1 基本2.2 拓展2.3 终极 3. 实战 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 基本知识推荐阅读:KeepAlive知识点 从实战中学习,源自实战中vue路由的…...
AI数据分析:deepseek生成SQL
在当今数据驱动的时代,数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展,AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行自动补全SQL 查询语句。 我们都知道,SQL 查询语…...
Kafka 消息 0 丢失的最佳实践
文章目录 Kafka 消息 0 丢失的最佳实践生产者端的最佳实践使用带有回调的 producer.send(msg, callback) 方法设置 acks all设置 retries 为一个较大的值启用幂等性与事务(Kafka 0.11)正确关闭生产者与 flush() 方法 Broker 端的最佳实践设置 unclean.l…...
vue3(笔记)3.0 Pinia状态管理数据.持久化插件.内置vue devtools调试工具
---pinia状态管理数据(vuex升级版) 官网镜像:(https://pinia.vuejs.org/zh/core-concepts/) 安装(手动): npm install pinia 导入pinia: 组合式写法的格式: 使用前需要导入: import {defineStore} from piniaactions:支持了同步和异步的方法(融合了mutations) 在组件中调…...
装饰器模式:灵活扩展对象功能的利器
一、从咖啡加料说起:什么是装饰器模式? 假设您走进咖啡馆点单: 基础款:美式咖啡(15元)加料需求:加牛奶(3元)、加焦糖(5元)、加奶油(…...
linux应用:errno、perror、open、fopen
errno errno 是一个全局变量,定义在 头文件中。当系统调用(如 open、read、write 等)或库函数执行失败时,会将一个错误码赋值给 errno。不同的错误码代表不同的错误类型,通过检查 errno 的值,可以判断具体…...
网络原理--HTTP协议
http中文名为超文本传输协议,所谓“超文本”就是指传输范围超出了能在UTF8等码表上找到的字符的范围,包含一些图片,特殊格式之类的。 HTTP的发展简介 从图中可以看出到现在已经发展出了HTTP3,但是市面上的主流还是以HTTP1.0为主。…...
编译可以在Android手机上运行的ffmpeg程序
下载代码 git clone gitgithub.com:FFmpeg/FFmpeg.git git checkout n7.0建立build目录 mkdir build cd build创建build.sh脚本 vim build.sh这段脚本的主要功能是配置和编译 FFmpeg,使其能够在 Android 平台上运行,通过设置不同的架构和 API 级别&am…...
华为hcia——Datacom实验指南——配置手工模式以太网链路聚合
什么是以太网链路聚合(Eth-trunk) 是一种将多个物理链路捆绑在一起,让设备以为是一条大链路,能够增加带宽,增加冗余度,提升可靠性,实现负载平衡。 传输方式有两种 基于数据流传输和基于数据包…...
【C语言6】数组和函数实践:扫雷游戏的简单实现
文章目录 一、扫雷游戏分析和设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析1.2.2 文件结构设计 二、扫雷游戏的代码实现三、扫雷游戏的扩展总结 一、扫雷游戏分析和设计 1.1 扫雷游戏的功能说明 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续…...
LeetCode 热题 100----1.两数之和
LeetCode 热题 100----1.两数之和 题目描述 我的解法 语言:js 思路就是:用双重循环去找哪两个数字相加等于target,目前的时间复杂度为O(n2),之后右优化思路再更新。...
《模式和状态管理》知识总结三-EcuM与BswM模块的交互
前言 这篇文章主要搞清楚在模式管理中,BswM和EcuM各自的分工。距离学完模式管理也有几天时间了,写这篇文章算是复习一下。 EcuM及BswM交互总览 EcuM负责Ecu的上下电状态的处理,当Ecu处于正常运行状态的时候,EcuM会将Ecu的控制权…...
