Подготовка GPU-окружения для Machine Learning (ML) и Data Science (DS)
После ознакомления с этим руководством вы узнаете, как подготовить окружение для выполнения задач, связанных с Machine Learning (ML) и Data Science (DS), а также запустите конфигурацию LLM Llama-2-7B Fine-tuning с LoRA в conda-окружении.
-
Подготовьте новую виртуальноую машину с GPU, если этого не было сделано ранее.
-
Подключите сервис Cloud GPU, если это не было сделано ранее.
-
Запросите в технической поддержке квоты на шаблон конфигурации ВМ на базе GPU.
-
Создайте виртуальную машину с параметрами:
-
Шаблон конфигурации с 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-адреса.
Остальные параметры установите на свое усмотрение.
-
-
-
Подключитесь к ВМ.
-
Установите или обновите драйвер NVIDIA.
Подготовить ML-окружение можно одним из способов:
- через установку компонентов CUDA в ОС;
- через запуск Docker-контейнера из готового образа с помощью NVIDIA Container Toolkit.
Окружение подготавливается непосредственно в ОС вашей виртуальной машины. Используйте этот метод, если необходим доступ к системным компонентам и самостоятельно устанавливать и настраивать нужные версии компонентов CUDA.
-
Установите компоненты CUDA.
-
Установите Python, если этого не было сделано ранее:
Ubuntu/DebianRed Hat Enterprise Linuxsudo apt install -y python3 python3-venv python3-pip -
Установите 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 -
Ознакомьтесь с условиями использования. Для подтверждения согласия введите команды:
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/mainconda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r -
Создайте и активируйте conda-окружение:
conda create -n ml-env python -yconda activate ml-env -
Установите PyTorch с поддержкой CUDA 12.4:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 -
Проверьте, что 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')" -
Установите необходимые ML-библиотеки:
pip install \transformers \accelerate \bitsandbytes \peft \datasets \sentencepiece \einops \ -
(Опционально) Сохраните окружение и pip-зависимости:
conda env export > environment.ymlpip freeze > requirements.txtПозже используйте эти файлы для:
-
быстрого создания аналогичного сonda-окружения:
conda env create -f environment.yml -
восстановления pip-зависимостей:
pip install -r requirements.txt
-
-
Создайте 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 модель готова к обучению!") -
Запустите скрипт:
Системная установка компонентов CUDANVIDIA Container Toolkit + Dockerexport HF_TOKEN="<HF_ТОКЕН>"python llama.pyЗдесь
<HF_ТОКЕН>— токен в Hugging Face. Аккаунт, использующий этот токен, должен иметь доступ к репозиторию meta-llama/Llama-2-7b-hf.При успешном выполнении в выводе команды будет сообщение:
LoRA модель готова к обучению!