История команд: Установка и настройка LLM-системы с Docker и Qwen3

Данный документ представляет собой структурированный и человекочитаемый отчёт на основе выполненных в терминале команд. Он описывает процесс установки Docker, NVIDIA-инструментов, загрузки модели Qwen3 и развёртывания LLM-приложения с использованием Docker Compose.


1. Установка базовых компонентов

Редактирование и запуск скрипта установки

Добавляем следующий код:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
nano install.sh
bash install.sh

Установка Docker и его компонентов

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

2. Настройка поддержки NVIDIA GPU

Добавление репозитория NVIDIA Container Toolkit

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

Обновление пакетов и установка NVIDIA Container Toolkit

apt-get update
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
apt-get install -y \
  nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}

Проверка работы GPU в Docker

docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

Успешный запуск контейнера с nvidia-smi подтверждает корректную настройку GPU.


3. Установка системных зависимостей

Установка заголовков ядра Linux

apt install linux-headers-$(uname -r)

Проверка видеодрайверов

lspci -k | grep -EA2 'VGA|3D'
nvidia-smi

4. Настройка Docker для работы с GPU

Конфигурация демона Docker

nano /etc/docker/daemon.json

Добавляем в ранее открытый файл следующие данные:

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia"
}

Файл был отредактирован для добавления поддержки nvidia в качестве рантайма.

Установка nvidia-container-runtime и перезапуск Docker

apt-get install -y nvidia-container-runtime
systemctl restart docker

5. Подготовка рабочей директории и загрузка модели Qwen3

Создание директории для LLM

mkdir /opt/llm
cd /opt/llm/

Клонирование модели Qwen3-8B с Hugging Face

Установка необходимых инструментов:

apt install git
apt install git-lfs
git lfs install

Успешное клонирование:

git clone https://huggingface.co/Qwen/Qwen3-8B
cd Qwen3-8B/

6. Развёртывание приложения с Docker Compose

Сборка и запуск контейнера

docker compose build
docker compose up -d

Настройка прав на исполняемый файл

chmod +x entrypoint.sh

После исправления прав — повторная пересборка:

docker compose up -d

7. Работа с контейнером

Проверка состояния контейнеров и логов

docker ps
docker logs llm-chat

Вход в контейнер

docker exec -it llm-chat bash

8. Управление версиями и пересборка

Многократные циклы остановки, пересборки и запуска

docker compose down
docker compose build
docker compose up -d --build

Выполнялось многократно (команды 67141) для отладки и пересборки образа.


9. Работа с дополнительным хранилищем

Создание резервной директории llm2

mkdir llm2
cp -r llm/models/ llm2/

Удаление ненужной модели (освобождение места)

rm -rf Qwen3-4B/

Проверка свободного места:

df -h

10. Загрузка дополнительной модели

Клонирование базовой версии Qwen3-4B

git clone https://huggingface.co/Qwen/Qwen3-4B-Base

11. Подготовка образа для офлайн-использования

Сохранение Docker-образа в архив

docker save llm-chat -o llm-chat-offline.tar

Исправление опечатки (-0-o) в команде 148.

Уточнение имени образа:

docker images | grep llm-chat
docker save llm2-llm-chat -o llm-chat-offline.tar

12. Финальные действия

Проверка структуры и сохранение истории

ls -lah
df -h
history > history.md

История команд сохранена в формате Markdown для документации.


Выводы

Был успешно выполнен полный цикл:

  • Установка Docker и поддержки GPU
  • Настройка NVIDIA Container Toolkit
  • Загрузка моделей Qwen3-8B и Qwen3-4B-Base
  • Развёртывание LLM-приложения через Docker Compose
  • Отладка и пересборка контейнера
  • Подготовка офлайн-образа для переноса

Рекомендации

  • Убедитесь, что llm-chat-offline.tar содержит актуальную версию образа.
  • При переносе на другую систему используйте docker load -i llm-chat-offline.tar.
  • Для экономии места рассмотрите использование только одной версии модели (8B или 4B).

Проект готов к использованию в офлайн-режиме.

Description
No description provided
Readme 129 KiB
Languages
Python 87.2%
Shell 7.6%
Dockerfile 5.2%