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

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践

⭐ 引言

随着大语言模型(LLM)和人工智能技术的迅猛发展,开发者们越来越多地尝试在本地环境中部署模型进行实验。
但部署过程中常常会遇到 网络限制、资源冲突 和 工具复杂性 等问题。本文聚焦于实际操作中遇到的 Docker 镜像冗余问题,并总结了从问题发现到解决的完整流程。同时,结合 Ollama、Open WebUI 和 Qwen 的联系,分享一套适用于本地 LLM 部署的 Docker 最佳实践工作流,帮助开发者高效部署和管理模型。
在这里插入图片描述

🔍 Ollama、Open WebUI 和 Qwen 的联系

📌 Ollama

  • 定位:本地大语言模型推理工具,支持 RESTful API。
  • 功能:
    • 提供 LLM 模型的高效推理能力。
    • 通过命令行工具快速部署 RESTful 服务。
  • 优势:
    • 轻量化:支持 CPU 和 GPU 环境。
    • 离线能力:无需联网即可本地运行模型。

📌 Open WebUI

  • 定位:基于浏览器的交互界面,方便与模型交互。
  • 功能:
    • 提供文档导入和 RAG(检索增强生成)支持。
    • 可视化界面适合复杂任务的操作。
  • 优势:
    • 用户友好:降低命令行门槛。
    • 高扩展性:与 Ollama 的后端无缝结合。

📌 Qwen

  • 定位:阿里巴巴推出的大语言模型,支持中英文双语。
  • 功能:
    • 文本生成、理解和推理能力强大。
    • 可在 Ollama 或 Hugging Face 环境中部署。
  • 优势:
    • 任务灵活:适用于对话生成、知识问答等。
    • 开放性强:支持自定义训练与开源应用。

📎 三者的协作

  • Ollama 提供模型推理服务,并通过 API 接口供其他工具调用。
  • Open WebUI 作为用户界面,与 Ollama 的 API 交互。
  • Qwen 是核心模型,为用户提供实际生成能力。

🛠️ 镜像冗余问题:从发现到解决的完整分析

📌 问题背景

在通过 Docker 部署 Open WebUI 时,始终无法正常启动容器,日志显示 网络无法访问 Hugging Face。但实际根源是 Docker 镜像冗余 导致的容器冲突。

现象:
1. 多个停止状态的容器残留。
2. 重复镜像未清理,导致新容器启动失败。
3. 错误日志显示:

Error response from daemon: conflict: unable to delete <image_id> - image is being used by stopped container.

📋 问题排查与解决

1. 检查运行状态的容器:

docker ps -a

输出结果显示多个以相同镜像启动的容器,其中一些处于停止状态。

2. 检查镜像状态:

docker images

发现重复镜像未清理,占用存储空间,可能导致冲突。

3. 停止并删除所有相关容器:

docker stop <container_id>
docker rm <container_id>

4. 强制删除镜像:
即使镜像有残留关联容器,docker rmi 也可以强制删除:

docker rmi <image_id>

• 例如:docker rmi 7d2
此命令只需提供镜像 ID 的前几位即可,Docker 会自动匹配。

5. 删除未使用的镜像:
该命令清理所有未被使用的镜像,释放存储空间。

docker image prune -a

6. 重新加载镜像并启动容器:

  • 加载离线镜像:
docker load < x86-64-images.tar.gz
  • 启动 Open WebUI 容器
docker run -d --network=host \-v /home/<user>/.ollama/models:/app/backend/data \-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \--name open-webui \--restart always \ghcr.io/open-webui/open-webui:main
  • 以下是对该 docker run 命令的逐步解读,每个选项和参数的详细说明:

**1. 基本命令:docker run **
• 启动一个新的容器实例,基于指定的镜像运行。
• 这是 Docker 最常用的命令,用于容器化服务的启动。

2. 参数解析

  • -d
    • 含义:以 后台(detached)模式 运行容器。
    • 功能:让容器在后台运行,而不是占用当前终端。
    • 优势:适合需要长期运行的服务,如 API 或 Web 应用。

  • –network=host
    • 含义:让容器直接使用主机的网络栈,而不启用 Docker 默认的桥接网络。
    • 功能:
    • 容器中的服务可直接使用主机的 IP 和端口,而不需要端口映射。
    • 网络性能更高,避免了容器和主机之间的网络虚拟化开销。
    • 注意:
    • 使用 --network=host 时,容器内的端口与主机共用,因此可能引发端口冲突。
    • 在某些场景下可能降低安全性,因为容器直接暴露于主机网络。

  • -v /home//.ollama/models:/app/backend/data
    • 含义:挂载主机目录 /home//.ollama/models 到容器中的 /app/backend/data。
    • 功能:
    • 主机的 ~/.ollama/models 目录用于存储模型文件,将其挂载到容器内的对应目录。
    • 容器运行期间可以访问主机上的模型文件,实现数据共享。
    • 优势:
    • 数据持久化:即使容器删除,模型文件仍保留在主机上。
    • 方便管理:直接在主机上更新模型文件,无需重启容器。

  • -e OLLAMA_BASE_URL=http://127.0.0.1:11434
    • 含义:通过环境变量 -e 为容器中的服务设置配置。
    • 功能:
    • 定义 OLLAMA_BASE_URL 环境变量,指定 Ollama 服务的基地址。
    • 在该示例中,http://127.0.0.1:11434 表示 Ollama 服务运行在主机的 127.0.0.1 地址和 11434 端口上。
    • 优势:
    • 配置灵活:通过环境变量可动态调整服务地址,无需修改代码或重新构建镜像。

  • –name open-webui
    • 含义:为容器指定一个唯一的名字 open-webui。
    • 功能:
    • 方便管理容器,例如 docker stop open-webui。
    • 提高可读性,相比于容器的随机 ID,容器名字更易识别。

  • –restart always
    • 含义:设置容器的重启策略为 always。
    • 功能:
    • 当 Docker 守护进程启动时,自动重启该容器。
    • 如果容器崩溃,也会自动尝试重启。
    • 优势:
    • 提高服务的稳定性和可用性,适合长时间运行的容器化服务。

  • ghcr.io/open-webui/open-webui:main
    • 含义:指定容器镜像来源。
    • 解析:
    • ghcr.io/open-webui/open-webui:镜像的路径,托管于 GitHub Container Registry。
    • main:镜像的标签,通常表示主分支的最新版本。
    • 功能:
    • Docker 会从注册表拉取 open-webui:main 镜像并创建容器。
    • 如果镜像已存在本地,则直接使用,无需重复下载。

技巧总结

    1. 缩短 ID 输入:
      无需完整输入容器或镜像的 ID,只需提供前几位即可,Docker 自动匹配:
docker rm 7eb
docker rmi 7d2
    1. 强制删除镜像:
      若提示镜像被关联容器占用,可先删除关联的容器或直接用 docker rmi 强制删除。
    1. 清理未使用资源:
      使用 docker image prune -a 一次性清理所有未使用的镜像,保持存储空间整洁。

📋 Docker 最佳实践工作流

为避免类似问题,以下是一套 系统化的 Docker 清理与部署工作流,帮助开发者优化操作流程:

📌 1. 项目初始化

1. 检查已有容器和镜像状态:

docker ps -a
docker images

2. 清理未使用的容器和镜像:

docker container prune
docker image prune -a

📌 2. 加载或拉取镜像

  • 加载离线镜像:
tar -xzvf x86-64-images.tar.gz
docker load < x86-64-images.tar.gz
  • 拉取远程镜像:
docker pull ghcr.io/open-webui/open-webui:main

📌 3. 部署并启动容器

1. 启动 Open WebUI:

docker run -d --network=host \-v /home/<user>/.ollama/models:/app/backend/data \-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \--name open-webui \--restart always \ghcr.io/open-webui/open-webui:main

2. 启动 Ollama 服务:

ollama serve

📌 4. 日常维护

  • 查看容器状态:
docker ps
  • 查看容器日志:
docker logs <container_id>
  • 更新镜像:
docker pull ghcr.io/open-webui/open-webui:main

📝 结语

这次部署的最大收获在于:
1. 系统化问题分析:通过逐步排查,从网络问题定位到 Docker 镜像冲突。
2. 工具高效协作:深入理解 Ollama、Open WebUI 和 Qwen 的协作方式,充分发挥其功能。
3. 优化实践工作流:总结出了一套高效的 Docker 清理与部署流程。

希望这篇博客能为遇到类似问题的开发者提供启发和帮助。如果您有任何问题或想法,欢迎留言讨论! 🚀

相关文章:

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

&#x1f6e0;️ 在 Windows WSL 上部署 Ollama 和大语言模型&#xff1a;从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型&#xff08;LLM&#xff09;和人工智能技术的迅猛发展&#xff0c;开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…...

做题时HashSet、TreeSet、LinkedHashSet的选择

一、HashSet 此类实现 Set 接口&#xff0c;由哈希表&#xff08;实际上是一个 HashMap 实例&#xff09;支持。它不保证 set 的迭代顺序&#xff1b;特别是它不保证该顺序恒久不变。 代码&#xff1a; import java.util.HashSet; import java.util.LinkedHashSet; import ja…...

Manus手套动作捕捉AI训练灵巧手

随着人工智能&#xff08;AI&#xff09;和机器人技术的融合日益紧密&#xff0c;使用真实动作数据AI扩容训练机器人的方式正在被用于开发更富表现力的机器人。Manus手套凭借精准的动作捕捉技术和导出数据的强大兼容性&#xff0c;在灵巧手的研发和应用中发挥了重要作用。 手部…...

嵌入式驱动开发详解4(内核定时器)

文章目录 前言通用定时器系统节拍节拍数与时间转换基本框架定时器使用代码展示通用定时器特点 高精度定时器 前言 LInux内核定时器是一种基于未来时间点的计时方式&#xff0c;以当前时刻来启动的时间点&#xff0c;以未来的某一时刻为终止点。比如&#xff0c;现在是10点5分&…...

Linux:信号的预备和产生

引入&#xff1a; 比如当前快递小哥需要通知你下来取快递&#xff08;产生信号&#xff09;&#xff0c;然后通过电话或短信告知了你&#xff08;发送信号&#xff09;&#xff0c;但是当前你正在打游戏&#xff0c;所以你并不会马上去处理&#xff0c;但是你会记得这件事&…...

国城杯2024——Curve

相关知识链接&#xff1a;https://tangcuxiaojikuai.xyz/post/187210a7.html #sagemath from Crypto.Util.number import *def add(P, Q):(x1, y1) P(x2, y2) Qx3 (x1*y2 y1*x2) * inverse(1 d*x1*x2*y1*y2, p) % py3 (y1*y2 - a*x1*x2) * inverse(1 - d*x1*x2*y1*y2, p…...

AI生成不了复杂前端页面?也许有解决方案了

在2024年&#xff0c;编程成为了人工智能领域最热门的赛道。AI编程技术正以惊人的速度进步&#xff0c;但在生成前端页面方面&#xff0c;AI的能力还是饱受质疑。自从ScriptEcho平台上线以来&#xff0c;我们收到了不少用户的反馈&#xff0c;他们表示&#xff1a;“生成的页面…...

常见矩阵分析法(BCG、GE、IE、SPACE、TOWS、优先、战略优先级、安索夫、风险矩阵):如何通过系统化方法助力战略决策与数据驱动决策

在快速变化的商业环境中&#xff0c;企业决策者面临着诸多复杂的选择与挑战。矩阵分析法作为战略分析的重要工具&#xff0c;能够系统化地分析企业的内外部环境&#xff0c;帮助管理层做出更加科学、合理的决策。本文将全面解析常见的矩阵分析法&#xff0c;并探讨它们在数据驱…...

JWT 在 SaaS 系统中的作用与分布式 SaaS 系统设计的最佳实践

在现代 SaaS&#xff08;软件即服务&#xff09; 系统中&#xff0c;随着服务规模的扩大和用户需求的多样化&#xff0c;如何高效、安全地进行用户身份验证、权限控制以及租户隔离&#xff0c;成为了系统架构中的核心问题之一。**JWT&#xff08;JSON Web Token&#xff09;**作…...

基于C#和Sql Server的网上书店管理系统

基于C#和Sql Server的网上书店管理系统 摘要 本系统是建立在 Windows 平台上&#xff0c;基于 B/S 结构的一个网上书店。通过这个网上书店&#xff0c;可以实 现简单的电子商务功能。 整个网站风格一致&#xff0c;较为美观&#xff0c;有完善的导航机制。普通用户从前台首页…...

特高频局放装置在现代配电设施中的应用

引言 随着电力系统的快速发展&#xff0c;尤其是现代配电系统的不断升和智能化&#xff0c;配电网的安全、稳定和运行变得愈发重要。为了确保电力系统能够及时应对各种运行问题&#xff0c;并提高故障诊断和监控的能力&#xff0c;现代配电系统中的监测技术也不断得到创新与提…...

FSC认证是什么?FSC认证费用

FSC认证是指森林管理委员会&#xff08;Forest Stewardship Council&#xff09;颁发的一种认证&#xff0c;以下是对FSC认证的详细介绍&#xff1a; 一、FSC认证的定义与目的 FSC认证标志着一件产品来自经过环境友好、社会有益和经济可行的可持续管理的森林。FSC是一个独立的…...

JAVA数据结构

1.数组 (Array): 固定大小的容器,用于存储相同类型的元素,数组在内存中是连续存储的,支持通过索引快 速访问元素。 int[] numbers = new int[10]; numbers[0] = 1;2.Java Collections Framework (JCF) JCF提供了一组接口和类用于管理和操作集合(如列表,集合,…...

mysql8 主从复制一直失败

问题描述&#xff1a; 开启同步后从服务器一直失败&#xff0c;报错如下&#xff1a; Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ANONYMOUS at source log …...

EDA - Spring Boot构建基于事件驱动的消息系统

文章目录 概述事件驱动架构的基本概念工程结构Code创建事件和事件处理器创建事件总线创建消息通道和发送逻辑创建事件处理器消息持久化创建消息发送事件配置 Spring Boot 启动类测试运行项目 概述 在微服务架构和大规模分布式系统中&#xff0c;事件驱动架构&#xff08;EDA&a…...

使用vue-seamless-scroll实现echarts图表大屏滚动,出现空白间隔的解决方案

一、背景介绍 最近的业务开发需求&#xff0c;想要实现echarts图表大屏滚动&#xff0c;小编首先采用vue-seamless-scroll进行实现&#xff0c;结果发现第二屏出现空白间隔&#xff0c;尝试了多种解决方案均不生效&#xff0c;最终选择换一个方案。 二、封装的ScrollList组件…...

ios使用UIScrollView和PageControl创建图片轮播

1.创建cocoa touch class 2.同时创建xib页面 3.SceneDelegate设置根视图控制器 // // SceneDelegate.m // iosstudy2024 // // Created by figo on 2024/8/5. //#import "SceneDelegate.h" #import "WidgetViewController.h"interface SceneDelegate …...

3D 生成重建024-LGM第一个开源的3D生成大模型!

3D 生成重建024-LGM第一个开源的3D生成大模型 文章目录 0 论文工作1 论文方法2 实验效果 0 论文工作 这篇论文介绍了一种名为LGM&#xff08;大型多视角高斯模型&#xff09;的新方法&#xff0c;用于从单视角图像或文本提示生成高分辨率的三维内容。该方法的核心思想是双重的…...

linux目录权限

一、目录权限的基本概念 Linux中的每个文件和目录都有与之关联的权限&#xff0c;这些权限决定了谁可以读取、写入或执行它们。权限分为三组&#xff1a; 所有者&#xff08;Owner&#xff09;权限&#xff1a;目录所有者的权限群组&#xff08;Group&#xff09;权限&#x…...

语言模型使用心得

使用像文心一言这样的语言模型&#xff0c;在撰写文章时确实能提供极大的帮助。然而&#xff0c;重要的是我们要明确主次关系&#xff1a;自己的创意和内容应当是文章的核心&#xff0c;而语言模型则扮演着一个辅助角色&#xff0c;帮助我们梳理思路&#xff0c;使文章条理更加…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...