Linux系统docker部署Ollama本地大模型及部署Hugging Face开源模型,ollama相关注意点,非ollama模型创建,模型量化,显存建议

本文主要描述在Linux系统使用docker部署ollama自有模型以及Hugging Face开源模型,也涉及到一些相关注意点,欢迎沟通讨论~

拉取镜像

拉取ollama最新镜像:docker pull ollama/ollama:latest

运行ollama

执行:docker run -d --restart=always --gpus=all -v ollama:/root/.ollama -e OLLAMA_ORIGINS="*" -e OLLAMA_HOST="0.0.0.0" -p 31434:11434 --name ollama ollama/ollama
参数解释:

  1. -d后台运行
  2. --restart=always自启动
  3. --gpus=all指定GPU运行
  4. -v ollama:/root/.ollama挂载磁盘
  5. -e OLLAMA_ORIGINS="*"跨域
  6. -e OLLAMA_HOST="0.0.0.0"监听所有可用的网络接口,从而允许外部网络访问
  7. -p 31434:11434端口映射
  8. --name ollama容器名称

注意有坑
docker -v ollama:/root/.ollama此处由于挂载目录使用了相对路径,所以本地文件夹位于 /var/lib/docker/volumes/ollama而非运行命令的相对路径

从宿主机进入ollama容器:
docker exec -it ollama /bin/bash

常用命令:

拉取大模型:ollama pull qwq:32b查看本地大模型列表:ollama list运行大模型:ollama run qwq:32b运行大模型--查看推理速度:ollama rm qwq:32b --verbose查看运行中的大模型(模型以及GPU占用百分比):ollama ps删除本地指定大模型:ollama rm qwq:32b查看模型modelfile配置:ollama show --modelfile qwq:32b根据Modelfile文件创建ollama模型(例):ollama create qwq-32b-q5 -f qwq.Modelfile

选取模型

ollama自有模型是通过量化的,默认Q4_K_M量化,对显存要求不高,如果显存未拉满,可以考虑去Hugging Face上下载未量化或者更高精度的量化模型,然后构建成ollama模型运行。

GPU显存与模型选择:

  • 显存16G,ollama官方32B以下模型流畅运行,运行32B模型大概需要25G左右显存,会爆显存,推理很慢,但是也能推理。如果想提高32B以下模型推理精度,尽量压榨显存,比如32B以下量化后低于16G的,可以参考下面在ollama中创建并运行Hugging Face的高精度开源模型。
  • 显存32G,ollama官方32B模型能流畅运行,不会爆显存。想提高精度,也同样可以参考下面,运行Q5_K_M等更高精度开源量化模型,比如GGUF等模型。模型大小应小于显存大小,最好预留几个G,比如32G显存,可以下载20G出头大小的模型,当然如果构建ollama模型时上下文参数num_ctx设置过大,占用显存会更高,对应的模型文件也必须更小才行,不然会爆显存。

如果是两张16G显卡跑ollama,显存会叠加成32G,但不支持张量并行(VLLM支持张量并行),推理速度相比同算力单张32G不会叠加。


ollama自有模型使用:

ollama模型列表:https://ollama.com/search
在这里插入图片描述
进入ollama官网,进入对应模型详情页,选择对应参数的模型,复制对应ollama run命令,在ollama容器中执行。
ollama run qwq:32b

此时ollama会自动先拉取模型,再运行。
也可以只拉取模型到本地,后续通过ai集成平台,通过ollama调用,可以执行ollama pull qwq:32b拉取。


非ollama自有模型构建(Hugging Face):

大概流程:

  • 下载huggingface开源模型
  • 构建ollama模型
  • 像ollama自有模型一样使用
下载huggingface模型
注册Hugging Face的Access Tokens并保存(后续下载脚本需要):

在这里插入图片描述

ollama模型列表:https://huggingface.co/?activityType=update-model&feedType=following
这里以QwQ-32B为例,查看对应GGUF量化模型库,选择好自己需要的量化版本,我这里选择的是Q5_K_M的GGUF量化版qwq-32b-q5_k_m.gguf进行下载,相比ollama官方Q4_K_M的量化版精度更高。
模型选择

修改下载脚本

不一定非要用这个python脚本下载,也可以通过其他方式下载GGUF量化模型文件后放到服务器上

创建脚本文件:mkdir download.py
复制编辑以下脚本到download.py中:
vim download.py

import os
from tqdm import tqdm# 临时将 `HF_ENDPOINT` 设置为 `https://hf-mirror.com`镜像地址
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
print(os.getenv('HF_ENDPOINT'))from huggingface_hub import hf_hub_download, list_repo_files# 设置 Hugging Face 仓库路径
repo_id = "Qwen/QwQ-32B-GGUF"
# 设置本地保存路径
local_dir = "/usr/local/"# 创建本地文件夹(如果不存在)
os.makedirs(local_dir, exist_ok=True)# 获取仓库中的所有文件
file_list = list_repo_files(repo_id=repo_id, repo_type="model",token="替换Access Tokens")# 指定要下载的前缀/后缀,或者文件名,模糊匹配
required_prefixes = ['qwq-32b-q5_k_m.gguf]# 过滤出以指定前缀开头的文件--已屏蔽
#filtered_file_list = [file for file in file_list if any(file.startswith(prefix) for prefix in required_prefixes)]# 匹配required_prefixes的文件进行下载
filtered_file_list = [filefor file in file_listif any(prefix in file for prefix in required_prefixes)
]# 初始化 tqdm 进度条
pbar = tqdm(filtered_file_list, desc="下载进度", unit="file", colour="green")# 逐个下载文件
for file in pbar:pbar.set_description(f"正在下载: {file}")hf_hub_download(repo_id=repo_id,filename=file,repo_type="model",local_dir=local_dir,local_dir_use_symlinks=False,resume_download=True,token="替换Access Tokens")# 关闭进度条
pbar.close()print(f"模型文件已下载到: {local_dir}")

参数解释:

  • repo_id 模型对应Hugging Face仓库路径
  • local_dir 本地保存路径
  • token Hugging Face的Access Tokens
  • required_prefixes 需要下载的文件名
执行python脚本,进行模型下载

执行:python3 download.py

构建ollama模型

创建Modelfile文件:
参考文档:https://github.com/ollama/ollama/blob/main/docs/modelfile.md?login=from_csdn

To use this:

  • Save it as a file (e.g. Modelfile)
  • ollama create choose-a-model-name -f <location of the file e.g. ./Modelfile>
  • ollama run choose-a-model-name
  • Start using the model!

个人建议:可以参考ollama官方同名模型的Modelfile文件,在其基础之上,根据需求修改一些参数,比如num_ctx等,然后创建模型

查询ollama自有模型Modelfile配置:ollama show --modelfile qwq:32b
在这里插入图片描述

新建一个qwq.Modelfile文件,复制Modelfile配置到qwq.Modelfile文件下,更改第一行FROM的路径为本地下载好的GGUF文件路径,如果有其他需要调整的模型构建参数,可以参考上面的官方配置链接,在其基础之上修改。
在这里插入图片描述
执行创建命令:ollama create qwq-32b-q5 -f qwq.Modelfile

查看创建的模型:ollama list
在这里插入图片描述


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

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

相关文章

在 Elasticsearch 中扩展后期交互模型 - 第 2 部分 - 8.18

作者&#xff1a;来自 Elastic Peter Straer 及 Benjamin Trent 本文探讨了如何优化后期交互向量&#xff0c;以适应大规模生产工作负载&#xff0c;例如减少磁盘空间占用和提高计算效率。 在之前关于 ColPali 的博客中&#xff0c;我们探讨了如何使用 Elasticsearch 创建视觉搜…

JAVA泛型的作用

‌1. 类型安全&#xff08;Type Safety&#xff09;‌ 在泛型出现之前&#xff0c;集合类&#xff08;如 ArrayList、HashMap&#xff09;只能存储 Object 类型元素&#xff0c;导致以下问题&#xff1a; ‌问题‌&#xff1a;从集合中取出元素时&#xff0c;需手动强制类型转…

深入理解 JavaScript/TypeScript 中的假值(Falsy Values)与逻辑判断 ✨

&#x1f579;️ 深入理解 JavaScript/TypeScript 中的假值&#xff08;Falsy Values&#xff09;与逻辑判断 在 JavaScript/TypeScript 开发中&#xff0c;if (!value) 是最常见的条件判断之一。它看似简单&#xff0c;却隐藏着语言的核心设计逻辑&#xff0c;也是许多开发者…

【AI速读】30分钟搭建持续集成:用Jenkins拯救你的项目

每个开发者都踩过的坑 你有没有这样的经历?花了一周时间改代码,自信满满准备提交,结果合并同事的更新后,项目突然编译失败,测试跑不通。你焦头烂额地排查问题,老板还在催进度……但明明不是你的错! 这种“集成地狱”几乎每个团队都遇到过。传统的手动集成方式(比如每周…

doris:负载均衡

用户通过 FE 的查询端口&#xff08;query_port&#xff0c;默认 9030&#xff09;使用 MySQL 协议连接 Doris。当部署多个 FE 节点时&#xff0c;用户可以在多个 FE 之上部署负载均衡层来实现 Doris 查询的高可用。 本文档介绍多种适用于 Doris 的负载均衡方案&#xff0c;并…

【大语言模型_6】mindie启动模型错误整理

一、启动报 [hccl_runner.cpp:141] AllGatherHcclRunner:0 HcclCommInitRootInfo fa il, error:2, rank:0, rankSize:2 背景&#xff1a;运行DeepSeek-R1-Distill-Qwen-14B模型&#xff0c;在2张300 P卡可以运行&#xff0c;单独一张启动报以上错误。 问题分析&…

dcat-admin已完成项目部署注意事项

必须 composer update 更新项目php artisan admin:publish 发布dcatadmin的静态资源手动创建目录&#xff08;如果没有&#xff09; storage/appstorage/framework/cachestorage/framework/sessionsstorage/framework/views 需检查 php不要禁用以下函数 putenvsymlinkproc_…

【计算机网络】网络简介

文章目录 1. 局域网与广域网1.1 局域网1.2 广域网 2. 路由器和交换机3. 五元组3.1 IP和端口3.2 协议3.3 协议分层 4. OSI七层网络协议5. TCP/IP五层模型5.1 TCP/IP模型介绍5.2 网络设备所在分层 6. 封装与分用6.1 数据包的称谓6.2 封装6.3 分用 1. 局域网与广域网 1.1 局域网 …

在QT中进行控件提升操作

目录 一、概述 二、功能需求 三、提升操作 1&#xff09;拖入标准控件 2&#xff09;自定义类 3&#xff09;提升控件 一、概述 QT中提供的标准控件能够满足我们大多数情况下的功能需求&#xff0c;但是在一些特殊应用场合&#xff0c;我们可能需要对控件的功能进行扩展&am…

如何自定义知行之桥Webhook端口返回的Response消息

一、Webhook端口功能概述 知行之桥的Webhook端口提供灵活的消息响应机制&#xff0c;支持用户通过修改配置文件自定义返回的消息体内容&#xff0c;能够查看是否调用接口成功、数据是否推送成功以及自定义返回给用户端的响应内容。 本指南将详解如何通过脚本配置实现以下需求…

pnpm config set ignore-workspace-root-check true

异常 ERR_PNPM_ADDING_TO_ROOT  Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don…

【iOS】SwiftUI 路由管理(NavigationStack)

QDRouter.swift import SwiftUIMainActor class QDRouter: ObservableObject {Published var path NavigationPath()static let main QDRouter() // 单例private init() {}func open(_ url: String) {guard let url URL(string: url) else {return}UIApplication.shared.op…

蓝桥杯学习-13回溯

13回溯 一、回溯1 例题1–递归实现排列型枚举-蓝桥19684 1.递归可以解决不定次数的循环问题 2.使用数组来标记数字是否被选过import java.util.Scanner;public class Main {static int n;static boolean[] st new boolean[10]; //判断数字是否被选过static int[] path ne…

【IDEA中配置Maven国内镜像源】

1. 为什么需要配置国内镜像源&#xff1f; 首先&#xff0c;Maven本身的工作原理是通过从仓库中下载依赖包。而这些依赖通常来自于 Maven中央仓库&#xff08;位于国外&#xff09;&#xff0c;由于网络原因&#xff0c;我们在国内访问这些远程仓库的速度比较慢&#xff0c;甚至…

【QA】观察者模式在QT有哪些应用?

1. 信号与槽机制 Qt的**信号与槽&#xff08;Signals & Slots&#xff09;**是观察者模式的典型实现&#xff0c;通过元对象系统&#xff08;Meta-Object System&#xff09;实现松耦合通信。 核心特点&#xff1a; 类型安全&#xff1a;编译时检查参数匹配跨线程支持&…

uniapp中的路由、本地存储与网络请求

navigator 在UniApp中&#xff0c;navigator 组件用于页面跳转和应用内导航。 基本使用 属性&#xff1a; url: 需要跳转的目标页面路径&#xff0c;路径可以是相对路径或绝对路径。open-type: 跳转的方式&#xff0c;默认为 navigateTo。其他可选值包括&#xff1a;redirec…

python3使用lxml解析xml时踩坑记录

文章目录 你的 XML 数据解析 XML----------------------------1. 获取 mlt 根元素的属性--------------------------------------------------------2. 获取 chain 元素的属性--------------------------------------------------------3. 获取所有 property 的值-------------…

【DeepSeek 学c++】dynamic_cast 原理

用于向下转化。 父类引用指向指类对象 假设父亲是a, 子类是b. B* pb new B; 子类对象 A* pa 父类引用指向子类对象&#xff0c; 那么向上转化 Apa pb 这个是自动完成的&#xff0c;隐式转化&#xff0c;不需要dynamic_cast 向下转化指的是 A pa new B。 这个是指向子类对象…

c++ 数组索引越界检查

用 c 编写了一些程序&#xff0c;发现 c 不会自动检查数组的索引越界问题。有时候程序运行错误&#xff0c;提示的错误信息莫名其妙&#xff0c;但很可能是某个数组越界的问题。 例如&#xff1a; #include <iostream>int main() {double arr[5] {1.1, 2.2, 3.3, 4.4,…

Touch Diver:Weart为XR和机器人遥操作专属设计的触觉反馈动捕手套

在虚拟现实&#xff08;VR&#xff09;和扩展现实&#xff08;XR&#xff09;领域&#xff0c;触觉反馈技术正逐渐成为提升沉浸感和交互体验的重要因素。Weart作为这一领域的创新者&#xff0c;凭借其TouchDIVER Pro和TouchDIVER G1触觉手套&#xff0c;为用户带来了高度逼真的…