2025-08-03 16:19:10 +00:00
2025-08-03 16:19:10 +00:00
2025-08-03 10:46:06 +00:00
2025-08-02 17:33:16 +00:00
2025-08-03 10:46:06 +00:00
2025-08-03 10:46:06 +00:00
2025-08-02 17:35:18 +00:00
2025-08-03 16:19:10 +00:00
2025-08-03 07:37:00 +00:00
2025-08-03 10:46:06 +00:00

История команд: Установка и настройка 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. Проверка наличия драйверов видеокарты

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

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

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

mkdir models/
cd models
git clone https://huggingface.co/Qwen/Qwen3-4B
git clone https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2

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 для документации.


Структура проекта

├── Dockerfile
├── README.md
├── app
│   ├── __pycache__
│   │   └── config.cpython-310.pyc
│   ├── config.py
│   ├── data
│   │   ├── chroma_db
│   │   │   ├── 55652433-5130-4082-b593-3dcf3ad2bc92
│   │   │   └── chroma.sqlite3
│   │   ├── docs
│   │   │   ├── REALITY.md
│   │   │   ├── VLESS-GRPC.md
│   │   │   ├── XTLS-Vision.md
│   │   │   └── marzban_ru.md
│   │   ├── generate_json_files.py
│   │   ├── generated_docs_db.py
│   │   └── parsed_json
│   │       ├── REALITY.json
│   │       ├── VLESS-GRPC.json
│   │       ├── XTLS-Vision.json
│   │       └── marzban_ru.json
│   ├── main.py
│   └── old_without_db.py
├── backup_docker_image.md
├── cache
│   ├── cache
│   │   ├── chroma
│   │   │   └── telemetry_user_id
│   │   └── pip
│   │       ├── http-v2
│   │       └── selfcheck
│   └── site-packages
├── docker-compose.yml
├── history.md
├── models
│   ├── Qwen3-4B
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── config.json
│   │   ├── generation_config.json
│   │   ├── merges.txt
│   │   ├── model-00001-of-00003.safetensors
│   │   ├── model-00002-of-00003.safetensors
│   │   ├── model-00003-of-00003.safetensors
│   │   ├── model.safetensors.index.json
│   │   ├── tokenizer.json
│   │   ├── tokenizer_config.json
│   │   └── vocab.json
│   └── paraphrase-multilingual-MiniLM-L12-v2
│       ├── 1_Pooling
│       │   └── config.json
│       ├── README.md
│       ├── config.json
│       ├── config_sentence_transformers.json
│       ├── model.safetensors
│       ├── modules.json
│       ├── onnx
│       │   ├── model.onnx
│       │   ├── model_O1.onnx
│       │   ├── model_O2.onnx
│       │   ├── model_O3.onnx
│       │   ├── model_O4.onnx
│       │   ├── model_qint8_arm64.onnx
│       │   ├── model_qint8_avx512.onnx
│       │   ├── model_qint8_avx512_vnni.onnx
│       │   └── model_quint8_avx2.onnx
│       ├── openvino
│       │   ├── openvino_model.bin
│       │   ├── openvino_model.xml
│       │   ├── openvino_model_qint8_quantized.bin
│       │   └── openvino_model_qint8_quantized.xml
│       ├── pytorch_model.bin
│       ├── sentence_bert_config.json
│       ├── sentencepiece.bpe.model
│       ├── special_tokens_map.json
│       ├── tf_model.h5
│       ├── tokenizer.json
│       ├── tokenizer_config.json
│       └── unigram.json
└── offline_packages
    └── requirements.txt

Выводы

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

  • Установка 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%