VK Cloud logo

Подготовка GPU-окружения для Machine Learning (ML) и Data Science (DS)

После ознакомления с этим руководством вы узнаете, как подготовить окружение для выполнения задач, связанных с Machine Learning (ML) и Data Science (DS), а также запустите конфигурацию LLM Llama-2-7B Fine-tuning с LoRA в conda-окружении.

Подготовительные шаги

  1. Подготовьте новую виртуальноую машину с GPU, если этого не было сделано ранее.

    1. Подключите сервис Cloud GPU, если это не было сделано ранее.

    2. Запросите в технической поддержке квоты на шаблон конфигурации ВМ на базе GPU.

    3. Создайте виртуальную машину с параметрами:

      • Шаблон конфигурации с GPU.

      • ОС с поддержкой нужной версии драйвера. Узнайте доступные версии для предпочитаемого дистрибутива в репозитории NVIDIA CUDA.

        Если нет необходимости в определенной версии драйвера, выберите один из рекомендуемых дистрибутивов:

        • Ubuntu версии 22.04 или 24.04.
        • Debian версии 11 или 12.
        • Red Hat Enterprise Linux/AlmaLinux/Oracle Linux/Rocky Linux версии 8 или 9.
      • Доступ во внешнюю сеть с помощью IP-адреса из пула публичных IP-адресов или Floating IP-адреса.

      Остальные параметры установите на свое усмотрение.

  2. Подключитесь к ВМ.

  3. Установите или обновите драйвер NVIDIA.

1. Подготовьте ML-окружение

Подготовить ML-окружение можно одним из способов:

  • через установку компонентов CUDA в ОС;
  • через запуск Docker-контейнера из готового образа с помощью NVIDIA Container Toolkit.

Окружение подготавливается непосредственно в ОС вашей виртуальной машины. Используйте этот метод, если необходим доступ к системным компонентам и самостоятельно устанавливать и настраивать нужные версии компонентов CUDA.

  1. Установите компоненты CUDA.

  2. Установите Python, если этого не было сделано ранее:

    sudo apt install -y python3 python3-venv python3-pip
  3. Установите Miniconda:

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh &&bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda &&eval "$($HOME/miniconda/bin/conda shell.bash hook)" &&conda init bash && source ~/.bashrc
  4. Ознакомьтесь с условиями использования. Для подтверждения согласия введите команды:

    conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/mainconda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
  5. Создайте и активируйте conda-окружение:

    conda create -n ml-env python -yconda activate ml-env
  6. Установите PyTorch с поддержкой CUDA 12.4:

    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
  7. Проверьте, что PyTorch видит GPU, CUDA и cuDNN:

    python -c "import torch; a=torch.cuda.is_available(); print('cuda',a,'cudnn',torch.backends.cudnn.is_available()); print('gpu', torch.cuda.get_device_name(0) if a and torch.cuda.device_count()>0 else 'none')"
  8. Установите необходимые ML-библиотеки:

    pip install \transformers \accelerate \bitsandbytes \peft \datasets \sentencepiece \einops \
  9. (Опционально) Сохраните окружение и pip-зависимости:

    conda env export > environment.ymlpip freeze > requirements.txt

    Позже используйте эти файлы для:

    • быстрого создания аналогичного сonda-окружения:

      conda env create -f environment.yml
    • восстановления pip-зависимостей:

      pip install -r requirements.txt

2. Запустите конфигурацию LLM Llama-2-7B Fine-tuning с LoRA

  1. Создайте Python-скрипт llama.py, который подготовит модель LoRA к обучению:

    from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, BitsAndBytesConfigfrom peft import LoraConfig, get_peft_model, TaskTypefrom datasets import load_datasetimport torchMODEL_NAME = "meta-llama/Llama-2-7b-hf"  # Требует принятия лицензии на HF# Квантизация 4-bit (умещается в 16 GB VRAM вместо 28 GB)bnb_config = BitsAndBytesConfig(   load_in_4bit=True,   bnb_4bit_use_double_quant=True,   bnb_4bit_quant_type="nf4",   bnb_4bit_compute_dtype=torch.bfloat16)tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)model = AutoModelForCausalLM.from_pretrained(   MODEL_NAME,   quantization_config=bnb_config,   device_map="auto"  # автоматически распределяет по GPU)# LoRA конфигурацияlora_config = LoraConfig(   task_type=TaskType.CAUSAL_LM,   r=16,               # ранг адаптера   lora_alpha=32,   target_modules=["q_proj", "v_proj"],  # только attention слои   lora_dropout=0.05,   bias="none")model = get_peft_model(model, lora_config)model.print_trainable_parameters()# trainable params: 4,194,304 || all params: 3,504,607,232 || trainable%: 0.1197# Загрузка датасета (пример — alpaca)dataset = load_dataset("tatsu-lab/alpaca", split="train[:1000]")# Дальше — стандартный Trainer из transformers# ... (добавь свой TrainingArguments и Trainer.train())print("LoRA модель готова к обучению!")
  2. Запустите скрипт:

    export HF_TOKEN="<HF_ТОКЕН>"python llama.py

    Здесь <HF_ТОКЕН>токен в Hugging Face. Аккаунт, использующий этот токен, должен иметь доступ к репозиторию meta-llama/Llama-2-7b-hf.

    При успешном выполнении в выводе команды будет сообщение:

    LoRA модель готова к обучению!