️ 在 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 和模型加载方面,利用量化技术降低资源消耗,为硬件条件受限的开发者提供有效的策略。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式の单例工厂原型模式

文章目录 前言一、单例模式1.1、饿汉式静态常量单例1.2、饿汉式静态代码块单例1.3、懒汉式单例&#xff08;线程不安全&#xff09;1.4、懒汉式单例&#xff08;线程安全&#xff0c;同步代码块&#xff09;1.5、懒汉式单例&#xff08;线程不安全&#xff0c;同步代码块&#…

net.sf.jsqlparser.statement.select.SelectItem

今天一启动项目&#xff0c;出现了这个错误&#xff0c;仔细想了想&#xff0c;应该是昨天合并代码&#xff0c;导致的mybatis-plus版本冲突&#xff0c;以及分页PageHelper版本不兼容 可以看见这个我是最下边的Caused by 报错信息&#xff0c;这个地方提示我 net .sf.jsqlpar…

第427场周赛: 转换数组、用点构造面积最大的矩形 Ⅰ、长度可被 K 整除的子数组的最大元素和、用点构造面积最大的矩形 Ⅱ

Q1、转换数组 1、题目描述 给你一个整数数组 nums&#xff0c;它表示一个循环数组。请你遵循以下规则创建一个大小 相同 的新数组 result &#xff1a; 对于每个下标 i&#xff08;其中 0 < i < nums.length&#xff09;&#xff0c;独立执行以下操作&#xff1a; 如…

CV工程师专用键盘开源项目硬件分析

1、前言 作为一个电子发烧友&#xff0c;你是否有遇到过这样的问题呢。当我们去查看函数定义的时候&#xff0c;需要敲击鼠标右键之后选择go to definition。更高级一些&#xff0c;我们使用键盘的快捷键来查看定义&#xff0c;这时候可以想象一下&#xff0c;你左手按下ALT&a…

SpringBoot3配置文件

一、统一配置管理概述: SpringBoot工程下&#xff0c;进行统一的配置管理&#xff0c;你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件(application.properties或application.yml)中 配置文件应该放置在Spring Boot工程的s…

【机器学习】任务十一:Keras 模块的使用

1.Keras简介 1.1 什么是Keras&#xff1f; Keras 是一个开源的深度学习框架&#xff0c;用 Python 编写&#xff0c;构建于 TensorFlow 之上。它以简单、快速和易于使用为主要设计目标&#xff0c;适合初学者和研究者。 Keras 提供了高层次的 API&#xff0c;帮助用户快速构…

【新品发布】ESP32-P4开发板 —— 启明智显匠心之作,为物联网及HMI产品注入强劲动力

核心亮点&#xff1a; ESP32-P4开发板&#xff0c;是启明智显精心打造的一款高性能物联网开发板。它专为物联网项目及HMI&#xff08;人机界面&#xff09;产品而设计&#xff0c;旨在为您提供卓越的性能和稳定可靠的运行体验。 强大硬件配置&#xff1a; 双核400MHz RISC-V处…

在Ubuntu22.04.5上安装Docker-CE

文章目录 1. 查看Ubuntu版本2. 安装Docker-CE2.1 安装必要的系统工具2.2 信任Docker的GPG公钥2.3 写入软件源信息2.4 安装Docker相关组件2.5 安装指定版本Docker-CE2.5.1 查找Docker-CE的版本2.5.2 安装指定版本Docker-CE 3. 启动与使用Docker3.1 启动Docker服务3.2 查看Docker…

SSM01-MyBatis框架(一文学会MyBatis)

Mybatis框架 一、Mybatis框架简介 1.1 传统JDBC的缺陷 &#xff08;1&#xff09;数据库连接创建、释放频繁会造成系统资源浪费 【MyBatis通过在核心配置文件中配置数据路连接池解决此问题】 &#xff08;2&#xff09; SQL语句在代码中硬编码(PreparedStatement向占位符传…

uniapp中导入uview或者uview plus

关于SCSS uview-plus依赖SCSS&#xff0c;您必须要安装此插件&#xff0c;否则无法正常运行。 如果您的项目是由HBuilder X创建的&#xff0c;相信已经安装scss插件&#xff0c;如果没有&#xff0c;请在HX菜单的 工具->插件安装中找到"scss/sass编译"插件进行安…

深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(上)

文章目录 一、ansible的主要组成部分二、安装三、相关文件四、ansible配置文件五、ansible 系列 一、ansible的主要组成部分 ansible playbook&#xff1a;任务剧本&#xff08;任务集&#xff09;&#xff0c;编排定义ansible任务集的配置文件&#xff0c;由ansible顺序依次执…

【CC2530开发基础篇】光敏和热敏传感器

一、前言 1.1 开发背景 本实验通过CC2530单片机接入光敏传感器和热敏传感器&#xff0c;进行数据采集与检测&#xff0c;并将检测结果通过串口终端输出。光敏传感器和热敏传感器是常见的环境感知设备&#xff0c;分别用于测量光强和温度。在实际应用中&#xff0c;这些传感器…

第6章:布局 --[CSS零基础入门]

CSS 布局是网页设计中至关重要的一个方面&#xff0c;它决定了页面上元素的排列和展示方式。以下是几种常见的 CSS 布局方法和技术&#xff1a; 1. 浮动布局&#xff08;Float Layout&#xff09; 浮动布局&#xff08;Float Layout&#xff09;曾经是网页设计中创建多列布局…

设计模式:20、状态模式(状态对象)

目录 0、定义 1、状态模式的三种角色 2、状态模式的UML类图 3、示例代码 0、定义 允许一个对象在其内部状态改变时改变它的行为&#xff0c;对象看起来似乎修改了它的类。 1、状态模式的三种角色 环境&#xff08;Context&#xff09;&#xff1a;环境是一个类&#xff0…

【论文笔记】VisionZip: Longer is Better but Not Necessary in Vision Language Models

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: VisionZip: Longer is Bet…

flex: 1 display:flex 导致的宽度失效问题

flex: 1 & display:flex 导致的宽度失效问题 问题复现 有这样的一个业务场景&#xff0c;详情项每行三项分别占33%宽度&#xff0c;每项有label字数不固定所以宽度不固定&#xff0c;还有content 占满标签剩余宽度&#xff0c;文字过多显示省略号&#xff0c; 鼠标划入展示…

visual studio2019开发过程中遇到的问题和有帮助的插件

文章目录 1. 注释中有中文导致报错2. 打开一个vs2013或者vs2010等老的项目兼容性3. LNK2019 unresolved external symbol main referenced in function __tmainCRTStartup4. image watch插件/扩展使用 1. 注释中有中文导致报错 C4819 The file contains a character that cann…

存内架构IR-DROP问题详解-电容电导补偿

一、总述 电容、电导补偿作为大规模数字电路的关键设计理念&#xff0c;是 CIM 架构优化的核心技术。在 CIM 中&#xff0c;平衡电容或电导并实现计算的精准映射&#xff0c;对能效提升和计算精度保障具有关键作用。本文基于近期文献探讨电容、电导补偿在 CIM 中的具体补偿策…

HDR视频技术之六:色调映射

图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域&#xff0c;因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备&#xff08;例如普通人家使用的电视&#xff0…

隐式神经网络实现低光照图像增强

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…