使用Docker+ollama部署大模型

news2024/9/29 18:49:02

Docker的安装----在 Ubuntu 系统上安装 Docker

一:配置系统的 APT 软件包管理器

首先添加 Docker 的官方 GPG 密钥
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
  1. sudo apt-get update:更新本地的包索引。这一步是为了确保系统知道最新的软件包信息,尤其是更新后的软件源列表
  2. sudo apt-get install ca-certificates curl gnupg:安装三个工具:                                   ca-certificates:确保系统具有最新的根证书,以验证 HTTPS 连接                              curl:用于从网络下载文件的命令行工具。                                                               gnupg:GNU Privacy Guard,用于处理 GPG 密钥和加密。
  3. sudo install -m 0755 -d /etc/apt/keyrings创建一个目录 /etc/apt/keyrings,用于存放 GPG 密钥。-m 0755 设置了该目录的权限为 0755(所有者可读写执行,组和其他用户可读和执行)
  4. curl -fsSL https://download.docker.com/linux/ubuntu/gpg:使用 curl 从 Docker 官方网站下载 GPG 密钥
  5. | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg:将下载的 GPG 密钥转换为 .gpg 格式并保存到 /etc/apt/keyrings/docker.gpg。gpg --dearmor 命令将 ASCII 格式的密钥转换为二进制格式
  6. sudo chmod a+r /etc/apt/keyrings/docker.gpg:设置密钥文件的权限,使得所有用户都可以读取这个文件。这样 APT 工具就可以使用这个密钥进行验证。
然后将 Docker 的软件源添加到 Apt 源
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  • echo:生成 Docker 软件源的配置行。
    • [arch=$(dpkg --print-architecture)]:指定软件包的架构,$(dpkg --print-architecture) 动态获取系统架构,如 amd64。
    • signed-by=/etc/apt/keyrings/docker.gpg:指定用于验证软件包的 GPG 密钥文件。
    • https://download.docker.com/linux/ubuntu:Docker 官方软件源的 URL。
    • $(. /etc/os-release && echo "$VERSION_CODENAME"):动态获取当前 Ubuntu 版本的代号(如 focal、jammy)。
    • stable:指定安装的软件包版本为稳定版。
  • | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null:将生成的软件源配置写入到 /etc/apt/sources.list.d/docker.list 文件中。tee 命令将输出同时写入到文件和标准输出,> /dev/null 是为了忽略输出内容

二:安装 Docker 的相关软件包

 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

三:验证 Docker 安装

安装完 Docker 后,可以运行一个简单的测试容器来验证 Docker 是否正常工作。

sudo docker run hello-world

如果看到来自 Hello from Docker!消息,表明已经成功安装并启动了 Docker Engine

四:运行 Docker 命令时不需要使用 sudo

Docker 的守护进程(daemon)以 root 用户身份运行,并通过 Unix 套接字(/var/run/docker.sock)与客户端(如 docker 命令行工具)通信。默认情况下,这个套接字的权限设置为只有 root 用户可以访问,因此普通用户需要使用 sudo 来运行 Docker 命令。

为了让普通用户可以不使用 sudo 运行 Docker 命令,需要将这些用户添加到一个特殊的用户组——docker 组中。这样,当 Docker 守护进程启动时,它会将这个 Unix 套接字的权限设置为 docker 组可读写,从而允许 docker 组中的用户运行 Docker 命令而无需 sudo。

  • 创建 Docker 用户组

    首先,创建一个名为 docker 的用户组。如果这个组已经存在,这一步会被忽略。

    sudo groupadd docker
    
  • 将当前用户添加到 Docker 组

    将当前用户添加到 docker 组,以便该用户可以执行 Docker 命令。

    sudo gpasswd -a $USER docker
    
  • 激活组变更

    使用 newgrp 命令使组变更立即生效

    newgrp docker
    
  • 测试 Docker 命令

    运行 docker run hello-world 命令,检查是否可以在没有 sudo 的情况下成功运行 Docker 命令。

    docker run hello-world
    

Ollama Docker image的配置

配置和安装 NVIDIA Container Toolkit

这是一个用于在 Docker 中支持 NVIDIA GPU 的工具

# Configure the repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
    | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
    | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
    | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update

# Install the NVIDIA Container Toolkit packages
sudo apt-get install -y nvidia-container-toolkit
代码解析----Install with Apt
1. 配置 NVIDIA 软件源

下载和安装 GPG 密钥

curl -fsSL <https://nvidia.github.io/libnvidia-container/gpgkey> \\
    | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

这条命令从 NVIDIA 的 GitHub 页面下载 GPG 密钥,用于验证软件包的来源和完整性。并且将 ASCII 格式的 GPG 密钥转换为二进制格式,保存至指定的位置

配置软件源

curl -s -L <https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list> \\
    | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \\
    | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

2.安装 NVIDIA Container Toolkit 软件包
sudo apt-get install -y nvidia-container-toolkit

配置 Docker 以支持 NVIDIA GPU 

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

启动 Docker 容器

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

  • docker run
    • 这是启动一个新容器的 Docker 命令。
  • d
    • 表示以分离模式(后台模式)运行容器。容器会在后台运行,而不会占用当前终端。
  • -gpus=all
    • 允许容器访问主机上所有可用的 NVIDIA GPU。这个选项要求 Docker 配置为使用 NVIDIA 容器工具包(NVIDIA Container Toolkit)。
  • v ollama:/root/.ollama
    • 将主机上的卷 ollama 挂载到容器的 /root/.ollama 路径。卷用于持久化数据,即使容器被删除,数据也会保留在卷中。
  • p 11434:11434
    • 将主机的端口 11434 映射到容器的端口 11434。这使得主机上的端口 11434 可以用于访问容器内的服务。
  • -name ollama
    • 给容器指定名称 ollama。这个名称可以用来引用和管理该容器。
  • ollama/ollama
    • 要使用的 Docker 镜像。这里指定的是 ollama/ollama 镜像,通常是从 Docker Hub 获取的镜像。

 获取和管理 Docker 镜像相关操作(optional)

  • docker images 用于查看本地镜像及其详细信息。
  • docker pull <image> 用于从镜像仓库拉取新镜像。
  • docker inspect <image> 用于查看镜像的详细配置。

镜像拉取机制

当执行 docker run 命令时,如果 Docker 在本地找不到指定的镜像,Docker 会自动尝试从配置的镜像仓库中拉取这个镜像

查看容器状态

docker ps

配置和管理容器相关的操作(optional)

  • 查看容器状态

    docker ps
    
  • 停止和删除容器

    docker stop ollama
    docker rm ollama
    
  • 在容器内执行命令

    docker exec -it ollama <command>
    

进入容器运行模型

刚才使用ollama/ollama镜像创建了一个叫做ollama的容器,并绑定了端口 11434

现在我想使用这个容器来运行llama3模型

docker exec -it ollama ollama run llama3
  • docker exec 命令
    • docker exec 是用来在一个已经运行的容器内执行命令的。它允许你在容器内部启动一个新的进程,通常用于调试和管理。
  • it 选项
    • i(interactive): 使容器的标准输入保持打开,以便你可以与容器内的进程进行交互。
    • t(tty): 为容器分配一个伪终端,这使得你可以以终端模式运行命令。
  • ollama
    • 这是正在运行的容器的名称。刚刚通过 docker run 命令启动了这个容器,并给它指定了名称 ollama
  • ollama run llama3
    • 这是在容器内执行的命令。它调用了 ollama 应用程序,并加载了 llama3 模型。

现在就可以和模型对话了

或者也可以尝试其他的模型library

参考:

https://hub.docker.com/r/ollama/ollama

https://medium.com/devops-technical-notes-and-manuals/how-to-install-docker-on-ubuntu-22-04-b771fe57f3d2

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

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

相关文章

使用 宝塔面板 部署 php网站

【语料库网站】宝塔面板 在线部署全过程 代码仓库&#xff1a;https://github.com/talmudmaster/RedCorpus 网站介绍 语料库提供双语文本检索和分享功能。供英语、翻译相关专业的爱好者&#xff0c;学生和老师学习使用。 该网站是对BiCorpus开源项目的二次开发。 技术栈&am…

DA14695 printf没办法打印浮点数

是因为没有打开浮点数库&#xff0c;添加了这个库也会导致堆内存的增加

基于Kahn算法|动态线程池,支持扩展点并发执行|召回|过滤

背景 在《分布式领域扩展点设计稿》一文中&#xff0c;我们提到针对业务横向扩展点和纵向扩展点的编排能力。 那有这样的一种场景&#xff1a;针对于一次会话&#xff0c;同时会调很多外部服务&#xff0c;同时这些RPC服务会有多种直接或间接的关系&#xff0c;是否有更高效的…

【Spring】Bean详细解析

1.Spring Bean的生命周期 整体上可以简单分为四步&#xff1a;实例化 —> 属性赋值 —> 初始化 —> 销毁。初始化这一步涉及到的步骤比较多&#xff0c;包含 Aware 接口的依赖注入、BeanPostProcessor 在初始化前后的处理以及 InitializingBean 和 init-method 的初始…

【Vue3】组件通信之$refs

【Vue3】组件通信之$refs 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…

操作系统|day4.Linux、Linux内核、Linux负载、Linux文件存储

文章目录 LinuxLinux内核定义功能态 Linux负载定义 Linux文件存储链接分类区别使用场景 拷贝 Linux Linux内核 定义 内核是操作系统的核心&#xff0c;具有很多最基本功能&#xff0c;它负责管理系统的进程、内存、设备驱动程序、文件和网络系统&#xff0c;决定着系统的性能…

【大模型系列】LanguageBind(ICLR2024.01)

Paper&#xff1a;https://arxiv.org/abs/2310.01852Github&#xff1a;https://github.com/PKU-YuanGroup/LanguageBindHuggingface&#xff1a;https://huggingface.co/spaces/LanguageBind/LanguageBindAuthor&#xff1a;Bin Zhu et al. 北大袁粒团队 文章目录 1 LanguageB…

临床试验的五大意义是什么?

临床试验是临床数据科学和现代医学研究中至关重要的环节&#xff0c;它通过严格的科学方法验证新药、新疗法以及医疗器械的安全性和有效性。临床试验不仅推动了医学科学的进步&#xff0c;也为患者提供了新的治疗选择&#xff0c;提升了公共卫生水平&#xff0c;具有重大的意义…

牛客JS题(二十二)数组过滤

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 合理封装范围判断函数 题干&#xff1a; 我的答案 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /></head><body><select name"&q…

【C语言】C语言期末突击/考研--详解一维数组与字符数组

目录 ​一、一维数组 1.数组的定义 2.一维数组在内存中的存储 二、数组访问越界与数组的传递 1.数组的访问越界 2.数组的传递 三、字符数组与scanf读取字符串 1.字符数组的初始化及传递 2.scanf读取字符串 四、gets函数与puts函数&#xff0c;str系列字符串操作函数 …

「iOS」自定义Modal转场——抽屉视图的实现

「iOS」自定义Modal转场——抽屉视图的实现 文章目录 「iOS」自定义Modal转场——抽屉视图的实现前言错误尝试自定义Modal转场实现流程自定义动画类UIPresentationController 成果展示参考文章 前言 在仿写网易云的过程之中&#xff0c;看到学长之前仿写时实现的抽屉视图&…

Java面试题-集合类

目录 1、请简单介绍下 Java 的集合类吧。 Collection Set TreeSet和HashSet List ArrayList 和 LinkedList 数组和链表的区别 Java 的列表有哪些实现类&#xff1f; Vector Queue Map 能说下 HashMap 的实现原理吗&#xff1f; 能说下 HashMap 的扩容机制吗&#x…

达梦数据库的系统视图v$cachepln

达梦数据库的系统视图v$cachepln 达梦数据库的系统视图V$CACHEPLN的主要作用是提供缓存中SQL执行计划的信息&#xff0c;在 ini 参数 USE_PLN_POOL !0 时才统计。通过查询这个视图&#xff0c;用户可以获取到缓存中的执行计划及其相关信息&#xff0c;如SQL语句文本等。这有助…

JavaScript青少年简明教程:DOM和CSS简介

JavaScript青少年简明教程&#xff1a;DOM和CSS简介 DOM简介 DOM&#xff08;Document Object Model&#xff09;将文档表示为一个树形结构&#xff0c;其中每个节点都是一个对象&#xff0c;每个对象都有其自身的属性和方法。 通过对DOM的操作&#xff0c;开发者可以使用编…

Mojo 不安全指针 详解

该UnsafePointer类型创建对内存中某个位置的间接引用。您可以使用UnsafePointer来动态分配和释放内存,或指向由其他代码分配的内存。您可以使用这些指针编写与低级接口交互的代码,与其他编程语言交互,或构建某些类型的数据结构。但顾名思义,它们本质上是不安全的。例如,当…

各地级市能源消费总量、夜间灯光值数据(2000-2022年)

全国各地级市能源消费总量、夜间灯光值数据&#xff08;2000-2022年&#xff09; 数据年限&#xff1a;2000-2022年 数据格式&#xff1a;excel 数据内容&#xff1a;337个地级市能源消费总量、夜间灯光值数据&#xff0c;包括城市、省份、年份、夜间灯光值&#xff08;总和&am…

子比主题允梦美化插件全开源版本

在其他论坛看到的一款不错的子比美化插件&#xff0c;功能也比较全面&#xff0c;因为插件作者上学没有时间维护&#xff0c;现在开源给大家&#xff0c;插件本站未做测试&#xff0c;需要的朋友自行下载测试&#xff0c;如果有授权的话可以到允梦作者网站进行咨询。需要其他美…

Java高级面试题(二)-- JVM

Jvm虚拟机&#xff0c;运行在操作系统之上&#xff0c;编译执行java代码 1, 面试官&#xff1a;手绘一个类加载过程 补充&#xff1a; 这里的执行硬件 java 调用 c 指令 创建线程 &#xff0c;new thread()->start() 底层代码就是 native start0&#xff08;&#xff09;&…

Golang | Leetcode Golang题解之第321题拼接最大数

题目&#xff1a; 题解&#xff1a; func maxSubsequence(a []int, k int) (s []int) {for i, v : range a {for len(s) > 0 && len(s)len(a)-1-i > k && v > s[len(s)-1] {s s[:len(s)-1]}if len(s) < k {s append(s, v)}}return }func lexico…

选择文件鼠标右键自定义菜单

注册表路径 计算机\HKEY_CLASSES_ROOT\*\shell 效果 操作 1.定位 winr&#xff0c;输入regedit, 地址栏输入以下路径&#xff0c;并回车。 计算机\HKEY_CLASSES_ROOT\*\shell 2.在shell上右键&#xff0c;新建项 3右键新建字符串值&#xff0c;Icon,Position 4 右键新建c…