# История команд: Установка и настройка LLM-системы с Docker и Qwen3 Данный документ представляет собой структурированный и человекочитаемый отчёт на основе выполненных в терминале команд. Он описывает процесс установки Docker, NVIDIA-инструментов, загрузки модели Qwen3 и развёртывания LLM-приложения с использованием Docker Compose. --- ## 1. Установка базовых компонентов ### Редактирование и запуск скрипта установки Добавляем следующий код: ```bash # 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 ``` ```bash nano install.sh bash install.sh ``` ### Установка Docker и его компонентов ```bash apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` --- ## 2. Настройка поддержки NVIDIA GPU ### Добавление репозитория NVIDIA Container Toolkit ```bash 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 ```bash 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 ```bash docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi ``` > ✅ Успешный запуск контейнера с `nvidia-smi` подтверждает корректную настройку GPU. --- ## 3. Установка системных зависимостей ### Установка заголовков ядра Linux ```bash apt install linux-headers-$(uname -r) ``` ### Проверка видеодрайверов ```bash lspci -k | grep -EA2 'VGA|3D' nvidia-smi ``` --- ## 4. Настройка Docker для работы с GPU ### Конфигурация демона Docker ```bash nano /etc/docker/daemon.json ``` Добавляем в ранее открытый файл следующие данные: ```bash { "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } }, "default-runtime": "nvidia" } ``` > Файл был отредактирован для добавления поддержки `nvidia` в качестве рантайма. ### Установка `nvidia-container-runtime` и перезапуск Docker ```bash apt-get install -y nvidia-container-runtime systemctl restart docker ``` --- ## 5. Подготовка рабочей директории и загрузка модели Qwen3 ### Создание директории для LLM ```bash mkdir /opt/llm cd /opt/llm/ ``` ### Клонирование модели Qwen3-8B с Hugging Face > ✅ Установка необходимых инструментов: ```bash apt install git apt install git-lfs git lfs install ``` > ✅ Успешное клонирование: ```bash git clone https://huggingface.co/Qwen/Qwen3-8B cd Qwen3-8B/ ``` --- ## 6. Развёртывание приложения с Docker Compose ### Сборка и запуск контейнера ```bash docker compose build docker compose up -d ``` ### Настройка прав на исполняемый файл ```bash chmod +x entrypoint.sh ``` > После исправления прав — повторная пересборка: ```bash docker compose up -d ``` --- ## 7. Работа с контейнером ### Проверка состояния контейнеров и логов ```bash docker ps docker logs llm-chat ``` ### Вход в контейнер ```bash docker exec -it llm-chat bash ``` --- ## 8. Управление версиями и пересборка ### Многократные циклы остановки, пересборки и запуска ```bash docker compose down docker compose build docker compose up -d --build ``` > Выполнялось многократно (команды 67–141) для отладки и пересборки образа. --- ## 9. Работа с дополнительным хранилищем ### Создание резервной директории `llm2` ```bash mkdir llm2 cp -r llm/models/ llm2/ ``` ### Удаление ненужной модели (освобождение места) ```bash rm -rf Qwen3-4B/ ``` > Проверка свободного места: ```bash df -h ``` --- ## 10. Загрузка дополнительной модели ### Клонирование базовой версии Qwen3-4B ```bash git clone https://huggingface.co/Qwen/Qwen3-4B-Base ``` --- ## 11. Подготовка образа для офлайн-использования ### Сохранение Docker-образа в архив ```bash docker save llm-chat -o llm-chat-offline.tar ``` > Исправление опечатки (`-0` → `-o`) в команде 148. > Уточнение имени образа: ```bash docker images | grep llm-chat docker save llm2-llm-chat -o llm-chat-offline.tar ``` --- ## 12. Финальные действия ### Проверка структуры и сохранение истории ```bash 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). --- > ✅ Проект готов к использованию в офлайн-режиме.