使用Docker+ollama部署大模型-LMLPHP

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+ollama部署大模型-LMLPHP

四:运行 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
    

使用Docker+ollama部署大模型-LMLPHP

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+ollama部署大模型-LMLPHP

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

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

镜像拉取机制

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

查看容器状态

docker ps

使用Docker+ollama部署大模型-LMLPHP

配置和管理容器相关的操作(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 模型。

使用Docker+ollama部署大模型-LMLPHP

现在就可以和模型对话了

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

使用Docker+ollama部署大模型-LMLPHP

参考:

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

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

08-05 06:58