网站建设 开发/seo站长工具查询
🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南
📝 引言
随着大语言模型(LLM)和人工智能的飞速发展,越来越多的开发者尝试在本地环境中部署大模型进行实验。然而,由于资源需求高、网络限制多以及工具复杂性,部署过程常常充满挑战。
本指南基于实际经验,详细讲解如何在 Windows WSL(Windows Subsystem for Linux) 上部署 Ollama 和大语言模型,同时解决端口转发等常见痛点,实现局域网内多设备访问。
无论您是 AI 技术新手、行业从业者,还是 经验丰富的专家,这篇文章都能提供全面的指南、实践经验与优化建议。
⭐ 1.为什么选择 WSL 部署大模型?
1.1 性能优势
👉 WSL 的设计目标是高效:
- WSL 利用 Windows 内核直接运行 Linux 环境,性能接近原生 Linux。
- 支持 NVIDIA GPU 加速(如 4070 Super),运行大语言模型毫无压力。
1.2 易用性
- 轻量级:无需像 VMware 或 VirtualBox 那样安装完整的虚拟机。
- 集成度高:与 Windows 文件系统和网络无缝结合。
- 简单维护:直接通过 Windows Store 更新 WSL。
1.3 实际适用性
- 开发者首选:对于想快速部署和运行模型的开发者,WSL 是简单且高效的选择。
⚙️ 2. 实现目标的挑战与应对策略
2.1 核心目标
🌟 最终实现的核心目标如下:
- 在 WSL 中成功部署 Ollama 服务并加载千问大语言模型。
- 配置 OpenWebUI,提供直观的交互界面,方便用户使用。
- 实现局域网访问,支持家庭设备通过浏览器与服务交互。
2.2 挑战分析
🚧 在实际联网部署中面临的关键挑战包括:
-
大模型下载与镜像获取
- 模型文件和 Docker 镜像较大,需确保网络环境稳定。
- 在线下载过程中可能因网络波动导致超时或中断。
-
端口转发和局域网访问
- WSL 默认服务绑定到
127.0.0.1
,局域网设备无法直接访问。 - 动态 IP 问题会导致端口转发规则失效,需频繁手动调整。
- WSL 默认服务绑定到
-
服务性能与配置
- 模型加载占用大量内存与显存,需合理优化系统资源。
- Docker 容器与 Ollama 服务同时运行时,可能出现资源竞争问题。
2.3 应对策略
✅ 在线获取资源,避免复杂的手动传输
- 直接通过
ollama
命令下载模型,无需额外离线准备。 - 使用 Docker 官方镜像仓库,确保高效获取最新镜像。
✅ 优化端口转发,实现动态调整
- 编写自动化脚本,动态获取 WSL 的当前 IP,并更新转发规则。
- 利用 Windows 的 Nginx 反向代理,将服务映射到局域网内可用地址。
✅ 服务绑定到 0.0.0.0,开放外部访问
- 修改服务绑定地址为
0.0.0.0
,允许外部设备通过 IP 地址直接访问。 - 配置 OpenWebUI 的 Web 服务,提供直观的交互界面。
2.3 应对策略
✅ 在线获取资源,避免复杂的手动传输
- 直接通过
ollama
命令下载模型,无需额外离线准备。 - 使用 Docker 官方镜像仓库,确保高效获取最新镜像。
✅ 优化端口转发,实现动态调整
- 编写自动化脚本,动态获取 WSL 的当前 IP,并更新转发规则。
- 利用 Windows 的 Nginx 反向代理,将服务映射到局域网内可用地址。
✅ 服务绑定到 0.0.0.0,开放外部访问
- 修改服务绑定地址为
0.0.0.0
,允许外部设备通过 IP 地址直接访问。 - 配置 OpenWebUI 的 Web 服务,提供直观的交互界面。## 📋 3.实践:在 WSL 上部署 Ollama 和千问模型(联网版)
3.1 准备资源与环境
环境准备📂
1.windows电脑安装WSL
wsl --installwsl --set-default-version 2
2. 在WSL 中安装 Docker:
sudo apt update
sudo apt install -y docker.io
sudo service docker start
友情提示:
可以通过如下命令实现将windows宿主机资源传输到 WSL:
cp /mnt/c/Users/<your_username>/Downloads/docker-images-openwebui.tar ~/
3. 配置非 root 用户运行 Docker:
sudo usermod -aG docker $USER
newgrp docker
验证 Docker 是否可用
加载 Docker 镜像
docker run hello-world```
3.2部署 Ollama 和千问模型
1.下载并安装 Ollama
curl -O https://ollama.com/downloads/ollama-linux-amd64
chmod +x ollama-linux-amd64
sudo mv ollama-linux-amd64 /usr/local/bin/ollama
2.启动 Ollama 服务
ollama serve
3.下载并运行千问模型
通过 ollama 工具直接在线下载并运行模型:
ollama run qwen2.5
3.3 部署 OpenWebUI
1. 拉取 OpenWebUI 的 Docker 镜像
docker pull ghcr.io/open-webui/open-webui:main
2. 启动 OpenWebUI 容器
docker run -d --name openwebui \-p 8080:8080 \-v ~/.ollama:/app/backend/data \ghcr.io/open-webui/open-webui:main
3. 验证 OpenWebUI 是否运行正常
docker ps
访问服务
确保容器状态为 Up,然后
• 本地访问:http://localhost:8080
• 局域网访问:通过端口转发或绑定所有地址实现http://<WIndows_IP>:8080。
3.4 设置局域网访问
获取 WSL 的 IP 地址
hostname -I
例如,返回的 IP 地址可能是 172.22.203.210。
在 Windows 中设置端口转发
1. 打开 PowerShell(管理员权限),运行以下命令:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=<WSL_IP> connectport=8080
替换 <WSL_IP> 为实际的 WSL IP 地址。
2. 在局域网中的设备上访问:
http://<Windows_IP>:8080
🔧4. WSL 的端口转发问题及优化解决方案
4.1 动态 IP 的困扰
WSL 的 IP 地址可能每次重启后变化,可以在 /etc/wsl.conf 文件中固定 WSL 子网:
[network]
generateResolvConf = false
subnet = 192.168.50.0/24
重启 WSL 后验证新 IP 是否生效。
wsl --shutdown
wsl
验证新 IP 是否生效:
hostname -I
4.2 自动化脚本
每次启动 WSL 自动更新端口转发规则:
创建脚本 setup_portproxy.sh:
#!/bin/bash
wsl_ip=$(hostname -I | awk '{print $1}')
powershell.exe -Command "netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=$wsl_ip connectport=8080"
赋予执行权限:
chmod +x setup_portproxy.sh
在每次 WSL 启动后运行脚本。
4.3 使用反向代理
在 Windows 主机上安装 Nginx,配置反向代理到 WSL 的服务地址:
1. 安装 Nginx
下载并安装 Nginx for Windows,编辑 conf/nginx.conf 文件,添加以下内容:
server {listen 80;server_name localhost;location / {proxy_pass http://172.22.203.210:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
2. 重新启动 Nginx
在命令行中执行:
nginx -s reload
📊 对比分析:WSL vs VMware vs VirtualBox
特性 | WSL | VMware Workstation | VirtualBox |
---|---|---|---|
性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
GPU 支持 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐ |
易用性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
免费使用 | ⭐⭐⭐⭐⭐ | ⭐ | ⭐⭐⭐⭐⭐ |
📝 结论与展望
🌟 总结
通过联网直接使用 ollama 下载并运行千问等大语言模型,同时结合 OpenWebUI 提供的便捷交互界面,用户可以快速搭建 AI 实验环境。借助反向代理和端口转发的优化配置,还能够轻松实现局域网内访问,从而为开发和实验提供更高效的支持。未来可以通过进一步优化自动化脚本和硬件配置,让 WSL 成为本地 AI 部署的最佳选择。
补充亮点
- 增加了 OpenWebUI 的 Docker 镜像加载和启动步骤。
- 强调局域网访问 OpenWebUI 的方法,使得模型在本地和局域网中都能灵活使用。
- 整体简化流程,无离线依赖,完全基于网络操作。
🔍 展望
-
为开发者提供解决问题的思路:
- 聚焦实际开发中的痛点问题,例如 WSL 的端口转发不稳定、资源调度困难等,提供清晰的解决步骤。
- 通过脚本化、自动化配置和硬件资源优化,减少开发者的重复性工作。
-
启发具体问题的解决方案:
- 针对端口映射问题,提出动态脚本更新的方案,避免配置失效。
- 在 GPU 和模型加载方面,利用量化技术降低资源消耗,为硬件条件受限的开发者提供有效的策略。
本文旨在通过分享实践心得与创新思考,助力你在技术探索的征途中,轻松跨越障碍,加速实验进程,让创意与成果璀璨绽放。🎯
相关文章:

️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南20241206
🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南 📝 引言 随着大语言模型(LLM)和人工智能的飞速发展,越来越多的开发者尝试在本地环境中部署大模型进行实验。然而,由于资源需求高、网络限制多…...

使用Tomcat搭建简易文件服务器
创建服务器 1. 复制一个tomcat服务器,并命名为file-service(好区分即可) 2.在webapp里面新建一个文件夹 uploadfiles ,用于存储上传的文件 3. 修改conf/service.xml,配置文件服务器的端口与上传文件夹的访问 在Host标签之间加入一个Context标签 docBase"uploa…...

《C++赋能:构建智能工业控制系统优化算法新引擎》
在工业 4.0 的浪潮汹涌澎湃之际,传统工业控制系统正面临着前所未有的挑战与机遇。如何借助人工智能的强大力量,实现工业控制系统的深度优化,已成为工业领域乃至整个科技界关注的焦点。而 C语言,以其卓越的性能、高效的执行效率和对…...

node.js中跨域请求有几种实现方法
默认情况下,出于安全考虑,浏览器会实施同源策略,阻止网页向不同源的服务器发送请求或接收来自不同源的响应。 同源策略:协议、域名、端口三者必须保持一致 <!DOCTYPE html> <html lang"en"> <head>&l…...

Node.js新作《循序渐进Node.js企业级开发实践》简介
《循序渐进Node.js企业级开发实践》由清华大学出版社出版,已于近期上市。该书基于Node.js 22.3.0编写,提供26个实战案例43个上机练习,可谓是目前市面上最新的Node.js力作。 本文对《循序渐进Node.js企业级开发实践》一书做个大致的介绍。 封…...

常见排序算法总结 (四) - 快速排序与随机选择
快速排序 算法思想 每一轮在数组相应的范围上随机找一个元素进行划分,将不大于它的所有元素都放到左边,将大于它的元素都放到右边。在左右两个子数组上不断地递归,直到整个数组上有序。 注意:实现时选择的时参考荷兰国旗问题优化…...

Doris的基础架构
Doris的基础架构 Frontend(FE):主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。Backend(BE):主要负责数据存储、查询计划的执行。 我的Github地址,欢迎大家加入我的开…...

python录制鼠标键盘操作循环播放
依赖 pip install pynput 程序: from pynput import mouse, keyboard import time import threading# 用于存储录制的鼠标和键盘事件 mouse_events [] keyboard_events []# 定义事件处理函数# 处理鼠标事件 def on_move(x, y):mouse_events.append((move, x, y))def on_cl…...

标书里的“废标雷区”:你踩过几个?
在投标领域,标书的质量不仅决定了中标的可能性,更是体现企业专业度的关键。但即便是经验丰富的投标人,也难免会在标书编制过程中踩中“废标雷区”。这些雷区可能隐藏在技术方案的细节中,也可能是投标文件格式的规范问题。以下&…...

centos下使用acme来自动获取免费通配符ssl证书,并发布到nginx服务,(DNS服务为阿里云)
参考链接: 官方文档 acme.sh获取证书 # 下载acme的项目 git clone https://gitee.com/neilpang/acme.sh.git # 执行安装脚本 cd acme.sh ./acme.sh --install -m myexample.com # 安装脚本会新增一个定时任务,这个命令可以检查 crontab -l # 从阿里云获取ks,写入 export Ali_…...

基于协同过滤的图书推荐系统 爬虫分析可视化【源码+文档】
【1】系统介绍 研究背景 随着互联网的普及和电子商务的发展,用户可以在线获取大量的图书资源。然而,面对海量的信息,用户往往难以找到自己真正感兴趣的书籍。同时,对于在线书店或图书馆等提供图书服务的平台来说,如何…...

Hyperf jsonrpc
依赖的 composer 包 composer require hyperf/json-rpc composer require hyperf/rpc-server composer require hyperf/rpc-client composer require hyperf/service-governance composer require hyperf/service-governance-consul composer require hyperf/service-gove…...

计算机毕业设计Spark股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Linux系统下安装配置 Nginx 超详细图文教程
一、下载Nginx安装包 nginx官网:nginx: downloadhttp://nginx.org/en/download.html找到我们所需要版本,把鼠标移动到上面,右键打开链接进行下载 或者如果Linux联网,直接在Linux服务上使用wget命令把Nginx安装包下载到/usr/local/…...

语言处理程序基础
逻辑运算 正规式 有限自动机 上下文无关文法 表达式(前缀、后缀、中缀) 将表达式(a-b)*(c5)构造成树的步骤为:括号不能出现在树中;按照表达式的计算顺序来依次构造!&…...

golang实现简单的redis服务
golang 手搓redis服务器仓库地址:实现思路: golang 手搓redis服务器 仓库地址: 仓库: https://github.com/dengjiayue/my-redis.git 实现思路: ● 协议: tcp通信 ● 数据包: 长度(4byte)方法(1byte)数据json ● 数据处理: 单线程map读写 ○ 依次处理待处理队列的请求(chan)…...

QT QTableWidget::setModel”: 无法访问 private成员
//严重性代码说明项目文件行禁止显示状态 //错误C2248 “QTableWidget::setModel”: 无法访问 private 成员(在“QTableWidget”类中声明) QSqlQueryModel* sql_model; ui.tableView_database->setModel(sql_model); //ok ui.tableWidget_database->setModel(sql_model)…...

STM32:Bootloader(AB备份,自动回滚)
目录 1.STM32的升级方式2.IAP升级3.代码逻辑展示3.1 划分存储区域3.2 IAP的状态4.源码分析4.1 记录IAP的状态4.2 APP代码异常判断4.3 IAP状态的切换以及异常的处理逻辑4.4 完整的逻辑代码1.STM32的升级方式 1、ICP:In Circuit Programing,简单说就是在单片机开发时使用烧录器…...

数独小游戏(Matlab)
基于Matlab制作的数独小游戏 (完整源码和介绍) 感兴趣可以随时联系博主噢~常在线能秒回! “Matlab数独小游戏”程序设计的关键技术流程和核心算法如下: 1.图形用户界面(GUI):使用MATLAB的GUIDE工具创建和管理用户界面࿰…...

使用docker让项目持续开发和部署
大多人选择开发时在本地,部署时文件都在容器里,如果没有容器,那就本地开发,没有映射文件,如果部署环境到容器了,容器内部启动时设置执行命令,再将映射的文件进行编译,这就直接能实现…...

电子应用设计方案-45:智能火锅系统方案设计
智能火锅系统方案设计 一、引言 随着人们生活水平的提高和对饮食体验的追求,智能火锅系统应运而生。本方案旨在设计一款集智能化控制、高效加热、安全保障和个性化体验于一体的智能火锅系统。 二、系统概述 1. 系统目标 - 实现精准的温度控制,满足不同…...

windows在conda下安装nlpia库
最近在学习《自然语言处理实战》这本书,书中用了其自己的库nlpia,我一直装不上,网上也找不到教程遂放弃,看到现在第四章没办法了,需要用到库里的一些文本语料,又折腾了一天,终于装好了ÿ…...

分布式事务的前世今生-纯理论
一个可用的复杂的系统总是从可用的简单系统进化而来。反过来这句话也正确: 从零开始设计的复杂的系统从来都用不了,也没办法让它变的可用。 --John Gal 《系统学》 1975 1. 事务的概念 百科: 事务(Transaction),一般是…...

apache部署若依前后端分离项目(开启SSL)
网站部署之后,大多数需要配置https,所以本章教程,介绍使用apache部署若依前后端项目的时候,如何开启SSL,以及如何配置SSL证书。 一、安装ssl模块 默认情况下,ssl模块是没有安装的。需要手动安装,否则直接配置SSL模块的时候,会报错。 sudo yum install mod_ssl二、查询s…...

Elasticsearch scroll 之滚动查询
Elasticsearch scroll 之滚动查询 Elasticsearch 的 Scroll API 是一种用于处理大规模数据集的机制,特别是在需要从索引中检索大量数据时。通常情况下,Elasticsearch 的搜索请求会有一个结果集大小的限制 (fromsize 的检索数量默认是 10,000 条记录)&am…...

MySQL 内存使用率常用分析语句
最近连续遇到MySQL内存占用过高导致服务器内存不足的问题,整理下收集到的常用分析语句 一、 OS层 首先需要确认是否是MySQL占用的内存 top -p $(pidof mysqld) -n 1 或者 cat /proc/$(pidof mysqld)/status 二、 DB层 1. 全局情况 各种buffer pool大小…...

L20.【LeetCode笔记】用栈实现队列(方法2)(★详解★)
目录 1.实现方法 过程详解 1.执行push 1->push 2->push 3->push 4 2.执行第一个pop 3.执行第二个pop 4.执行push 5->push 6 编辑 5.执行pop->pop->pop 代码实现 队列创建函数myQueueCreate 入队函数myQueuePush 出队函数myQueuePop 返回队列开头…...

PR蒙太奇
简介 蒙太奇是将不同的镜头鬓角在一起,已不同的时间、地点来表现人物、环境、情节等,有时会产生意想不到的想过。广义上来说,这种剪接做法就是蒙太奇,是由镜头组合构成的隐式语言。 含义 镜头组接技巧 叙事蒙太奇:…...

高中数学:计数原理-排列组合
文章目录 一、排列排列数例题 二、组合组合数例题 三、使用方法总结 一、排列 排列数 例题 二、组合 组合数 例题 三、使用方法总结 组合:从n个元素中抽取m个元素,不排序,则用组合计算 排列:从n个元素中抽取m个元素,再…...

pytorch中有哪些归一化的方式?
在 PyTorch 中,归一化是一种重要的操作,用于调整数据分布或模型参数,以提高模型的训练效率和性能。以下是常见的归一化方式及其应用场景: 1. 数据归一化 (1)torch.nn.functional.normalize 对输入张量沿…...