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

news2024/12/11 18:26:16

🛠️ 在 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 --install
   wsl --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.coloradmin.cn/o/2256911.html

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

相关文章

js:事件监听

事件监听 事件监听&#xff1a;让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就调用一个函数做出响应&#xff0c;也称为绑定事件或注册事件 事件&#xff1a;编程系统内发生的动作或发生的事情 比如用户单击一个按钮下拉菜单 添加事件监听 事件监听三要…

C# (WinForms) 使用 iTextSharp 库将图片转换为 PDF

iTextSharp简介 iTextSharp 是一个开源的 .NET 库&#xff0c;主要用于创建和操作 PDF 文档。它是 iText 的 .NET 版本&#xff0c;iText 是一个广泛使用的 Java 库。iTextSharp 继承了 iText 的核心功能并进行了适应 .NET 平台的调整。 iTextSharp 的主要功能包括&#xff1a…

使用 WebRtcStreamer 实现实时视频流播放

WebRtcStreamer 是一个基于 WebRTC 协议的轻量级开源工具&#xff0c;可以在浏览器中直接播放 RTSP 视频流。它利用 WebRTC 的强大功能&#xff0c;提供低延迟的视频流播放体验&#xff0c;非常适合实时监控和其他视频流应用场景。 本文将介绍如何在Vue.js项目中使用 WebRtcSt…

mysql5.7和mysql8.0安装教程(超详细)

目录 一、简介 1.1 什么是数据库 1.2 什么是数据库管理系统&#xff08;DBMS&#xff09; 1.3 数据库的作用 二、安装MySQL 1.1 国内yum源安装MySQL5.7&#xff08;centos7&#xff09; &#xff08;1&#xff09;安装4个软件包 &#xff08;2&#xff09;找到4个软件包…

ALSA笔记

alsa笔记 ALSA(Advanced Linux Sound Architecture)简介 以上是android和linux系统的音频整体架构图,他们不同的区别主要是在用户空间,Linux通过ALSA-Lib来和ALSA交互,而android则是tingyAlsa,其位于aosp源码根目录的/external/tinyalsa下; 在Kernel层,Alsa向上封装的D…

哈希表实现

哈希概念 哈希&#xff08;hash&#xff09;又称散列&#xff0c;是一种组织数据的方式。从译名来看&#xff0c;有散乱排列的意思。本质就是通过哈希函数把关键字 Key 跟存储位置建立一个映射关系&#xff0c;查找时通过这个哈希函数计算出 Key 存储的位置&#xff0c;进行快…

web复习(四)

JavaScript编程 1.计算圆的面积。 &#xff08;1&#xff09;表单中设置2个文本框、1个按钮、1个重置按钮&#xff0c;其中圆的面积文本框设置为只读&#xff1b; &#xff08;2&#xff09;编写两个自定义函数&#xff0c;分别是计算圆的面积函数area&#xff08;radius&…

第六届地博会世界酒中国菜助力广州龙美地标美食公司推动地标发展

第六届知交会暨地博会&#xff1a;世界酒中国菜助力广州龙美地标美食公司推动地标产品创新发展 2024年12月9日至11日&#xff0c;第六届粤港澳大湾区知识产权交易博览会暨国际地理标志产品交易博览会在中新广州知识城盛大启幕。本届盛会吸引了全球众多知识产权领域的专业人士和…

【期末复习】编译原理

1. 语法描述 1.1. 上下文无关文法 1.2. 句子 & 句型 & 语言 推导出来的都是句型但是如果句型中只含有终结符&#xff0c;那就是句子所有的句子合起来&#xff0c;才是语言 1.3. 文法 文法就是推导的式子。 1.4. 文法二义性 1.5. 文法二义性证明——根据最左 \ 最右推…

AI绘画设计实战-Day2

Stable Diffusion 提示词前缀 FF,(masterpiece:1.2),best quality,highres,extremely detailed CG,perfect lighting,8k wallpaper,anime,comic,game CG, FF&#xff0c;&#xff08;杰作&#xff1a;1.2&#xff09;&#xff0c;最高质量&#xff0c;高分辨率&#xff0c;极其…

python数据分析之爬虫基础:requests详解

1、requests基本使用 1.1、requests介绍 requests是python中一个常用于发送HTTP请求的第三方库&#xff0c;它极大地简化了web服务交互的过程。它是唯一的一个非转基因的python HTTP库&#xff0c;人类可以安全享用。 1.2、requests库的安装 pip install -i https://pypi.tu…

鸿雁电器发力,能否抢占康养卫浴新蓝海?

经济下行&#xff0c;叠加房地产行业的调整以及数智化浪潮的强劲推动&#xff0c;建材行业正面临着前所未有的变革与机遇。为了更好地把握行业趋势&#xff0c;求新求变&#xff0c;12月9日&#xff0c;鸿雁电器在青山湖园区鸿雁物联网大厦17楼鸿鹄厅成功举办了第四届“智创变革…

Scratch教学作品 | 3D飞行模拟器——体验飞行的无限乐趣! ✈️

今天为大家推荐一款令人惊叹的Scratch作品——《3D飞行模拟器》&#xff01;由BamBozzle制作&#xff0c;这款游戏完全用Scratch构建&#xff0c;带你体验开放世界飞行的自由与乐趣。从起飞到降落&#xff0c;每一步都需要你的精准操作&#xff01;更棒的是&#xff0c;这款游戏…

Linux服务器运维管理面板之1panel

华子目录 安装1panel使用卸载浏览器登录 安装 网站&#xff1a;https://community.fit2cloud.com/#/products/1panel/downloads 解压 [rootdocker-node1 ~]# tar -zxf 1panel-v1.10.13-lts-linux-amd64.tar.gz[rootdocker-node1 ~]# cd 1panel-v1.10.13-lts-linux-amd64/ [ro…

SpringBoot【二】yaml、properties两配置文件介绍及使用

一、前言 续上一篇咱们已经搭建好了一个springboot框架雏形。但是很多初学的小伙伴私信bug菌说&#xff0c;在开发项目中&#xff0c;为啥.yaml的配置文件也能配置&#xff0c;SpringBoot 是提供了两种2 种全局的配置文件嘛&#xff0c;这两种配置有何区别&#xff0c;能否给大…

学习笔记063——通过使用 aspose-words 将 Word 转 PDF 时,遇到的字体改变以及乱码问题

文章目录 1、问题描述&#xff1a;2、解决方法&#xff1a; 1、问题描述&#xff1a; Java项目中&#xff0c;有个需要将word转pdf的需求。本人通过使用aspose-words来转换的。在Windows中&#xff0c;转换是完全正常的。但是当部署到服务器时&#xff0c;会出现转换生成的pdf…

Linux下redis环境的搭建

1.redis的下载 redis官网下载redis的linux压缩包&#xff0c;官网地址:Redis下载 网盘链接&#xff1a; 通过网盘分享的文件&#xff1a;redis-5.0.4.tar.gz 链接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取码: ehgj 2.redis安装与配置 将包上传到 /…

帝可得-运营管理App

运营管理App Android模拟器 本项目的App客户端部分已经由前端团队进行开发完成&#xff0c;并且以apk的方式提供出来&#xff0c;供我们测试使用&#xff0c;如果要运行apk&#xff0c;需要先安装安卓的模拟器。 可以选择国内的安卓模拟器产品&#xff0c;比如&#xff1a;网…

用 Python 从零开始创建神经网络(十六):二元 Logistic 回归

二元 Logistic 回归 引言1. Sigmoid 激活函数2. Sigmoid 函数导数3. Sigmoid 函数代码4. 二元交叉熵损失&#xff08;Binary Cross-Entropy Loss&#xff09;5. 二元交叉熵损失导数&#xff08;Binary Cross-Entropy Loss Derivative&#xff09;6. 二进制交叉熵代码&#xff0…

高质量阅读微信小程序ssm+论文源码调试讲解

第2章 开发环境与技术 高质量阅读微信小程序的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对高质量阅读微信小程序用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&…