Койла решает
CUDA error: out of memory errorбезболезненно. Исправьте это всего лишь одной строкой кода и забудьте об этом.

Основная филиала-это полная повторная структура проекта (в настоящее время это в основном пусто, потому что у меня не хватает времени для его завершения). Чтобы увидеть рабочий код, проверьте тег v0.1.1 для подтверждения концепции (который не имеет полной поддержки по всем операциям и не подходит для производства). Чтобы использовать его, загрузите релиз v0.1.1 здесь.
? Предотвращает CUDA error: out of memory error с одной линией кода.
⚗ автоматически накапливает градиенты, когда размеры партий слишком велики.
? Лзико оценивает код Pytorch для сохранения вычислительной мощности.
✂ автоматически расщепляется вдоль партийного измерения на более дружественные цифры GPU (2 Powers), чтобы ускорить выполнение.
? Минимальный API (обертывание всех входов будет достаточно).
Вы когда -нибудь сталкивались RuntimeError: CUDA error: out of memory ? Мы все любим PyTorch из -за его скорости, эффективности и прозрачности, но это означает, что он не делает дополнительные вещи. Такие вещи, как предотвращение очень распространенной ошибки, которая беспокоит многих пользователей с 2017 года.
Эта библиотека направлена на то, чтобы предотвратить это, будучи легкой оберткой над нативным PyTorch . Когда тензор обернут, библиотека автоматически вычисляет объем оставшейся памяти графического процессора и использует правильный размер партии , сохраняя всех от необходимости вручную тонко настроить размер партии, когда используется модель.
Кроме того, библиотека автоматически использует правильный размер партии для графического процессора. Знаете ли вы, что использование больших партий не всегда ускоряет обработку? Он обрабатывается автоматически в этой библиотеке.
Поскольку код Koila является кодом PyTorch , поскольку он запускает PyTorch под капюшоном, вы можете использовать оба вместе, не беспокоясь о совместимости.
О, и все это в 1 строке кода! ?
Koila доступна на PYPI. Чтобы установить, запустите следующую команду.
pip install koila Использование мертво просто. Например, у вас есть следующий код PyTorch (скопированный из учебника PyTorch )
Определите вход, метку и модель:
# A batch of MNIST image
input = torch . randn ( 8 , 28 , 28 )
# A batch of labels
label = torch . randn ( 0 , 10 , [ 8 ])
class NeuralNetwork ( Module ):
def __init__ ( self ):
super ( NeuralNetwork , self ). __init__ ()
self . flatten = Flatten ()
self . linear_relu_stack = Sequential (
Linear ( 28 * 28 , 512 ),
ReLU (),
Linear ( 512 , 512 ),
ReLU (),
Linear ( 512 , 10 ),
)
def forward ( self , x ):
x = self . flatten ( x )
logits = self . linear_relu_stack ( x )
return logitsОпределите функцию потерь, рассчитайте выход и потери.
loss_fn = CrossEntropyLoss ()
# Calculate losses
out = nn ( t )
loss = loss_fn ( out , label )
# Backward pass
nn . zero_grad ()
loss . backward () Хорошо. Как адаптировать код для использования функций Koila ?
Вы добавляете эту строку кода (по состоянию на V0.1.1):
# Wrap the input tensor and label tensor.
# If a batch argument is provided, that dimension of the tensor would be treated as the batch.
# In this case, the first dimension (dim=0) is used as batch's dimension.
( input , label ) = lazy ( input , label , batch = 0 )Сделанный. У вас больше не заканчивает память.
CUDA error: out of memory обычно происходит в прямом проходе, потому что временные переменные должны быть сохранены в памяти.
Koila - это тонкая обертка вокруг PyTorch . Он вдохновлен статической/ленивой оценкой Tensorflow. Сначала создавая график, и запустите модель только тогда, когда обязательно, модель имеет доступ ко всей информации, чтобы определить, сколько ресурсов действительно нужно для вычисления модели.
С точки зрения использования памяти, для расчета использования памяти необходимы только формы временных переменных . Например, + берет два тензора с равными размерами и выводит тензор с размером, равный входным размеру, и log принимает один тензор, и выводит еще один тензор с той же формой. Вещание делает его немного сложнее, чем это, но общие идеи одинаковы. Отслеживая все эти формы, можно легко сказать, сколько памяти используется в прямом проходе. И выберите оптимальный размер партии соответственно.
НЕТ . Действительно, вычисление форм и вычисление размера и использования памяти звучит как много работы. Тем не менее, имейте в виду, что даже гигантская модель, такая как GPT-3, которая имеет 96 слоев, имеет всего несколько сотен узлов на своем вычислительном графике. Поскольку алгоритмы Koila работают в линейное время, любой современный компьютер сможет мгновенно обрабатывать график.
Большая часть вычислений тратится на вычисление отдельных тензоров и передачи тензоров на устройствах. И имейте в виду, что эти проверки происходят в ванильном PyTorch . Так что нет, совсем не медленно.
Этот проект был первоначально назван Коала , самым ленивым видом в мире, и этот проект о ленивой оценке тензоров. Однако, поскольку это имя взято на PYPI, у меня не было выбора, кроме как использовать другое имя. Koila - это слово, составленное мной, произносится так же, как вуаля (это французское слово), так что звучит как коала.
Если вам нравится то, что вы видите, подумайте о том, чтобы дать ей звезду (★)!
Почему я пережил неприятности и создал этот проект, несмотря на много подобных библиотек в Интернете?
Поиск размера партии не новый. На самом деле, могущественная популярная молния.
Поиск размера партии Lightning глубоко интегрирован в собственную экосистему. Вы должны использовать его DataLoader , подкласс из их моделей и соответственно обучить свои модели. Хотя рефакторинг контролируемых учебных задач для использования молнии относительно прост, очень больно делать то же самое с базой подкрепления кода обучения, где взаимодействие с окружающей средой является обязательным.
Для сравнения, поскольку Koila является супер легкой оберткой Pytorch, она работает, когда работает Pytorch, что обеспечивает максимальную гибкость и минимальные изменения в существующем коде.
Тем не менее, обратите внимание, что в случае, когда вы пишете новый код, рекомендуется Lightning, поскольку она обеспечивает соблюдение лучшего шаблона стиля кода, что принесет пользу модульности в долгосрочной перспективе.
Аналогичным образом, передача пустого тензора для создания вычислительного графа (он же статический график ) не является новой идеей, но тщательно изученной в популярной библиотеке Tensorflow и аналогичной библиотеке обертки PyTorch . Эти библиотеки страдают от того факта, что в них программы отладки излишне сложны. Например, TensorFlow был известен своей простотой развертывания, но болью в разработке, до такой степени, что пользователи перешли на PyTorch . Во время отладки людям нравится видеть, что находится внутри переменной, чтобы увидеть, содержит ли она неверное значение. Однако, поскольку статические графики только определяют отношения, значения не вычисляются, что затрудняет отладку.
Koila решает это, с нетерпением оценивая при преобразовании в строки, целые числа или любые значения питона. Это позволяет беспрепятственно отлаживать при сохранении возможности управления памятью, которая просто не доступна для более простой программы PyTorch , которая динамически (при необходимости) выделяет и освобождает память на лету.
Tensor S и LazyTensor S). Код работает во многих случаях, но он все еще находится в стадии разработки. Это не (пока) полностью совместимая PyTorch библиотекой из -за ограниченного времени. Избегайте использования его в производственных средах!
Открытость и инклюзивность относятся очень серьезно. Код доступен по лицензии Apache. Пожалуйста, следуйте следующему кодексу поведения.