# История команд: Установка и настройка 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. Проверка наличия драйверов видеокарты ### Проверка видеодрайверов ```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 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 ### Сборка и запуск контейнера ```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 ``` --- ## 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 для документации. --- ## Структура проекта ```bash ├── 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-4B** - Развёртывание LLM-приложения через Docker Compose - Отладка и пересборка контейнера - Подготовка офлайн-образа для переноса ### Рекомендации - Убедитесь, что `llm-chat-offline.tar` содержит актуальную версию образа. - При переносе на другую систему используйте `docker load -i llm-chat-offline.tar`. - Для экономии места рассмотрите использование только одной версии модели (8B или 4B). --- > ✅ Проект готов к использованию в офлайн-режиме.