当前位置: 首页 > news >正文

️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南20241206

🛠️ 在 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 核心目标

🌟 最终实现的核心目标如下:

  1. 在 WSL 中成功部署 Ollama 服务并加载千问大语言模型。
  2. 配置 OpenWebUI,提供直观的交互界面,方便用户使用。
  3. 实现局域网访问,支持家庭设备通过浏览器与服务交互。

2.2 挑战分析

🚧 在实际联网部署中面临的关键挑战包括:

  1. 大模型下载与镜像获取

    • 模型文件和 Docker 镜像较大,需确保网络环境稳定。
    • 在线下载过程中可能因网络波动导致超时或中断。
  2. 端口转发和局域网访问

    • WSL 默认服务绑定到 127.0.0.1,局域网设备无法直接访问。
    • 动态 IP 问题会导致端口转发规则失效,需频繁手动调整。
  3. 服务性能与配置

    • 模型加载占用大量内存与显存,需合理优化系统资源。
    • 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

特性WSLVMware WorkstationVirtualBox
性能⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
GPU 支持⭐⭐⭐⭐⭐⭐⭐⭐
易用性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
免费使用⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

📝 结论与展望

🌟 总结

通过联网直接使用 ollama 下载并运行千问等大语言模型,同时结合 OpenWebUI 提供的便捷交互界面,用户可以快速搭建 AI 实验环境。借助反向代理和端口转发的优化配置,还能够轻松实现局域网内访问,从而为开发和实验提供更高效的支持。未来可以通过进一步优化自动化脚本和硬件配置,让 WSL 成为本地 AI 部署的最佳选择。


补充亮点

  1. 增加了 OpenWebUI 的 Docker 镜像加载和启动步骤
  2. 强调局域网访问 OpenWebUI 的方法,使得模型在本地和局域网中都能灵活使用。
  3. 整体简化流程,无离线依赖,完全基于网络操作。

🔍 展望

  • 为开发者提供解决问题的思路

    • 聚焦实际开发中的痛点问题,例如 WSL 的端口转发不稳定、资源调度困难等,提供清晰的解决步骤。
    • 通过脚本化、自动化配置和硬件资源优化,减少开发者的重复性工作。
  • 启发具体问题的解决方案

    • 针对端口映射问题,提出动态脚本更新的方案,避免配置失效。
    • 在 GPU 和模型加载方面,利用量化技术降低资源消耗,为硬件条件受限的开发者提供有效的策略。

本文旨在通过分享实践心得与创新思考,助力你在技术探索的征途中,轻松跨越障碍,加速实验进程,让创意与成果璀璨绽放。🎯

相关文章:

️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南20241206

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

使用Tomcat搭建简易文件服务器

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

《C++赋能:构建智能工业控制系统优化算法新引擎》

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

node.js中跨域请求有几种实现方法

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

Node.js新作《循序渐进Node.js企业级开发实践》简介

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

常见排序算法总结 (四) - 快速排序与随机选择

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

Doris的基础架构

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

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…...

标书里的“废标雷区”:你踩过几个?

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

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】系统介绍 研究背景 随着互联网的普及和电子商务的发展&#xff0c;用户可以在线获取大量的图书资源。然而&#xff0c;面对海量的信息&#xff0c;用户往往难以找到自己真正感兴趣的书籍。同时&#xff0c;对于在线书店或图书馆等提供图书服务的平台来说&#xff0c;如何…...

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

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

Linux系统下安装配置 Nginx 超详细图文教程

一、下载Nginx安装包 nginx官网&#xff1a;nginx: downloadhttp://nginx.org/en/download.html找到我们所需要版本&#xff0c;把鼠标移动到上面&#xff0c;右键打开链接进行下载 或者如果Linux联网&#xff0c;直接在Linux服务上使用wget命令把Nginx安装包下载到/usr/local/…...

语言处理程序基础

逻辑运算 正规式 有限自动机 上下文无关文法 表达式&#xff08;前缀、后缀、中缀&#xff09; 将表达式&#xff08;a-b&#xff09;*&#xff08;c5&#xff09;构造成树的步骤为&#xff1a;括号不能出现在树中&#xff1b;按照表达式的计算顺序来依次构造&#xff01;&…...

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制作的数独小游戏 &#xff08;完整源码和介绍&#xff09; 感兴趣可以随时联系博主噢~常在线能秒回&#xff01; “Matlab数独小游戏”程序设计的关键技术流程和核心算法如下&#xff1a; 1.图形用户界面(GUI):使用MATLAB的GUIDE工具创建和管理用户界面&#xff0…...

使用docker让项目持续开发和部署

大多人选择开发时在本地&#xff0c;部署时文件都在容器里&#xff0c;如果没有容器&#xff0c;那就本地开发&#xff0c;没有映射文件&#xff0c;如果部署环境到容器了&#xff0c;容器内部启动时设置执行命令&#xff0c;再将映射的文件进行编译&#xff0c;这就直接能实现…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...