From 630a2bf91334486e8c6b835ba06eab9919e2d9c5 Mon Sep 17 00:00:00 2001 From: drholy Date: Sat, 2 Aug 2025 17:44:40 +0000 Subject: [PATCH] update readme --- README.md | 265 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 263 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a4c8010..5b69518 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,264 @@ -Для запуска используй команду: +# История команд: Установка и настройка LLM-системы с Docker и Qwen3 -docker compose up -d --configure \ No newline at end of file +Данный документ представляет собой структурированный и человекочитаемый отчёт на основе выполненных в терминале команд. Он описывает процесс установки 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). + +--- + +> ✅ Проект готов к использованию в офлайн-режиме. \ No newline at end of file