Ознакомьтесь с последней версией PyTorch, которая стала более быстрой, более питонизированной и более динамичной.
PyTorch — это фреймворк глубокого обучения с открытым исходным кодом и поддержкой сообщества, обеспечивающий гибкий и эффективный способ построения моделей машинного обучения. Он обладает удобным интерфейсом, широкой поддержкой сообщества и легко интегрируется в экосистему Python.
В PyTorch 2.0 были внесены фундаментальные изменения в основные операции компилятора, сохраняя при этом тот же уровень знакомства и удобства для разработчиков. Это последнее обновление обещает ускоренную производительность и расширенную поддержку для динамических форм и распределенного обучения.
От редакции Pythonist: вас может заинтересовать обзор книги «Знакомство с PyTorch». А если вы не знакомы с этим фреймворком, рекомендуем статью «Введение в PyTorch».
Хотите скачать книги по Python в 2 клика? Тогда вам в наш телеграм канал PythonBooks
PyTorch перемещает части из C++ обратно в Python, делая его более быстрым и лучше поддающимся модификации. В версии 2.0 появилась функция torch.compile
, которая меняет работу PyTorch на уровне компилятора. Эта возможность является опциональной и не влияет на ваш старый код.
Для создания прочной основы для функции torch.compile
были введены новые технологии:
Давайте рассмотрим быструю и простую реализацию кода PyTorch Compiler.
Без torch.compile
:
import torch model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2")
Чтобы повысить производительность модели, достаточно добавить обертку torch.compile
вокруг модели и получить скомпилированную модель. Это и есть plug-and-play.
import torch model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2") compiled_model = torch.compile(model)
Вы сможете просто обучать свою модель, ничего не меняя.
import torch model = torch.compile(model) for batch in dataloader: run_epoch(model, batch)
Или можно запустить режим вывода.
model = torch.compile(model) model(**input)
torch.compile()
поддерживает следующие параметры:
def torch.compile(model: Callable, *, mode: Optional[str] = "default", dynamic: bool = False, fullgraph:bool = False, backend: Union[str, Callable] = "inductor", **kwargs ) -> torch._dynamo.NNOptimizedModule
Приступая к работе с PyTorch 2.0, разработчики использовали 163 модели с открытым исходным кодом (46 HuggingFace Transformers, 61 TIMM и 56 TorchBench) для создания бенчмарков производительности новой компилируемой функции. Бенчмарк включает такие задачи, как классификация и генерация изображений, языковое моделирование, рекомендательные системы и обучение с подкреплением.
Результат показывает значительное повышение производительности при обучении на графических процессорах NVIDIA A100.
Примечание: в настоящее время бэкэнд по умолчанию поддерживает только CPU с графическими процессорами Nvidia серий Volta и Ampere.
Это только начало, и в ближайших обновлениях вы увидите дополнительные улучшения производительности и масштабируемости.
Вы можете просто установить новую версию PyTorch с помощью команды pip.
Скопируйте и вставьте соответствующую команду в терминал.
Для графических процессоров: CUDA 11.8
Оказалось, что новые версии графических процессоров демонстрируют значительно более высокую производительность.
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu118
Для графических процессоров: CUDA 11.7
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cu117
Центральные процессоры:
pip3 install numpy --pre torch torchvision torchaudio --force-reinstall --index-url https://download.pytorch.org/whl/nightly/cpu
Верификация:
git clone https://github.com/pytorch/pytorch cd tools/dynamo python verify_dynamo.py
Давайте попробуем функцию torch.compile
для ускорения Hugging Face трансформеров. Вы можете сделать свой код Hugging Face быстрее с помощью однострочного декоратора.
Примечание: При использовании torch.compile()
мы наблюдали прирост производительности на 30%-200% при обучении — TorchDynamo Performance Dashboard.
В данном примере мы применим torch.compile()
к большой языковой модели «dolly-v2-3b» для ускорения вывода. Чтобы запустить код в Google Colab, нам нужно сначала установить необходимые библиотеки Python.
%%capture %pip install transformers accelerate xformers
Затем мы загрузим и подгрузим токенизатор и языковую модель с помощью трансформеров Hugging Face. После этого мы добавим nn.Module
в функцию torch.compile()
.
import torch from transformers import ( AutoTokenizer, AutoModelForCausalLM, GenerationConfig, pipeline, ) tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-3b") model = AutoModelForCausalLM.from_pretrained( "databricks/dolly-v2-3b", device_map="auto", torch_dtype=torch.bfloat16 ) model = torch.compile(model) #only line of code is required
На последнем этапе мы преобразуем текст в лексемы с помощью tokenizer
, передадим их в model.generate
, а затем декодируем полученный результат в текст с помощью tokenizer.batch_decode
.
prompt = "I love you because" inputs = tokenizer(prompt, return_tensors="pt").to(device="cuda:0") # Generate generate_ids = model.generate(inputs.input_ids, max_length=50) tokenizer.batch_decode( generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True )[0]
Как видим, «dolly-v2» завершила предложение, добавив: «You are a good person».
"I love you because you are a good person. You are kind, you help others, you are honest, you are loyal, you are humble, you are humble, you are humble. You are a good person."
Он также работает с Hugging Face пайплайном. Просто укажите тип задачи, модель и токенизатор.
generator = pipeline("text-generation", model= model,tokenizer=tokenizer)<br>generator("What is the name of Germany's Capital?")
Вывод:
[{'generated_text': "What is the name of Germany's Capital? The name of Germany's Capital is Berlin."}]
Функция компиляции работает с трансформаторами, ускорителем и библиотеками TIMM Python.
Перевод статьи «PyTorch 2.0 is Here: Everything We Know».
В Python проверка существования файла перед попыткой его использования является обычной задачей, особенно если вы…
При анализе данных часто требуется быстро найти абсолютное значение набора чисел. Для выполнения этой задачи…
Pydantic - это мощная библиотека проверки данных и управления настройками для Python, созданная для повышения…
Python предлагает набор библиотек, удовлетворяющих различные потребности в визуализации, будь то академические исследования, бизнес-аналитика или…
В Python для представления данных в двоичной форме можно использовать байты. Из этой статьи вы…
В этой статье рассказывается о том, что такое Werkzeug и как Flask использует его для…