Koila는
CUDA error: out of memory error. 한 줄의 코드로 수정하고 잊어 버리십시오.

Main Branch는 프로젝트의 완전한 재 구조입니다 (현재 완료 할 시간이 충분하지 않아 현재 비어 있음). 작업 코드를 보려면 개념 증명에 대한 v0.1.1 태그를 확인하십시오 (모든 작업에 대해 완전히 지원하지 않고 생산에 적합하지 않음). 이를 사용하려면 여기에서 릴리스 V0.1.1을 다운로드하십시오.
? CUDA error: out of memory error .
⚗️ 배치 크기가 너무 커지면 자동으로 그라디언트를 축적합니다.
? Lazorch Code를 Lazilly 평가하여 컴퓨팅 전력을 절약합니다.
✂️은 배치 치수를 따라 자동으로 GPU 친화적 인 숫자 (2의 전력)로 자동 분할되어 실행 속도를 높입니다.
? 최소 API (모든 입력을 포장하면 충분합니다).
RuntimeError: CUDA error: out of memory 발생한 적이 있습니까? 우리는 속도, 효율성 및 투명성 때문에 PyTorch 좋아하지만 추가 일을하지는 않습니다. 2017 년부터 많은 사용자를 괴롭히는 매우 일반적인 오류를 방지하는 것과 같은 것들.
이 라이브러리는 기본 PyTorch 의 가벼운 래퍼가되어이를 방지하는 것을 목표로합니다. 텐서가 감겨지면 라이브러리는 나머지 GPU 메모리의 양을 자동으로 계산하고 올바른 배치 크기를 사용하여 모든 사람이 모델을 사용할 때마다 배치 크기를 수동으로 미세 조정하지 못하게합니다.
또한 라이브러리는 자동으로 올바른 배치 크기를 GPU로 사용합니다. 더 큰 배치를 사용하는 것이 항상 처리 속도를 높이는 것은 아니라는 것을 알고 있습니까? 이 라이브러리에서도 자동으로 처리됩니다.
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 하나의 텐서를 가져 가고 동일한 모양의 다른 텐서를 출력합니다. 방송은 그것보다 조금 더 복잡하지만 일반적인 아이디어는 동일합니다. 이 모든 모양을 추적함으로써, 포워드 패스에서 얼마나 많은 메모리가 사용되는지 쉽게 알 수 있습니다. 그에 따라 최적의 배치 크기를 선택하십시오.
아니요 . 실제로, 모양을 계산하고 크기와 메모리 사용량을 계산하는 것은 많은 작업처럼 들립니다. 그러나 96 개의 층이있는 GPT-3과 같은 거대한 모델조차도 컴퓨팅 그래프에 수백 개의 노드 만 있습니다. Koila 의 알고리즘은 선형 시간에 실행되므로 모든 최신 컴퓨터는 이와 같은 그래프를 즉시 처리 할 수 있습니다.
대부분의 컴퓨팅은 개별 텐서를 계산하고 장치를 통해 텐서를 전송하는 데 사용됩니다. 그리고 그 수표는 어쨌든 바닐라 PyTorch 에서 발생한다는 것을 명심하십시오. 그래서 아니요, 전혀 느리지 않습니다.
이 프로젝트는 원래 세계에서 가장 게으른 종인 Koala 로 지명 되었으며이 프로젝트는 텐서의 게으른 평가에 관한 것입니다. 그러나 그 이름은 PYPI에서 가져 오기 때문에 다른 이름을 사용하는 것 외에는 선택의 여지가 없었습니다. Koila 는 나에 의해 구성된 단어로, Voila (프랑스어 단어)와 비슷한 발음이므로 코알라처럼 들립니다.
당신이 보는 것을 좋아한다면, 이것을 별 (★)에게주는 것을 고려하십시오!
인터넷에서 비슷한 라이브러리에도 불구하고 왜 문제를 해결 하고이 프로젝트를 구축 했습니까?
배치 크기 검색은 새로운 것이 아닙니다. 사실, 강력한 인기있는 번개에는 그것을 가지고 있습니다.
Lightning의 배치 크기 검색은 자체 생태계에 깊이 통합되어 있습니다. DataLoader 를 사용하고 모델에서 서브 클래스를 사용하고 그에 따라 모델을 훈련시켜야합니다. Lightning을 사용하기위한 감독 학습 과제는 비교적 쉽지만 환경과 상호 작용하는 것이 필수적 인 강화 학습 코드 기반과 동일하게하는 것은 정말 고통 스럽습니다.
이에 비해 Koila 초경량 파이토치 래퍼이기 때문에 Pytorch가 작동 할 때 작동하므로 최대의 유연성과 기존 코드의 최소 변경 사항을 제공합니다.
그러나 새로운 코드를 작성하는 경우 더 나은 코드 스타일 패턴을 시행하므로 Lightning이 권장됩니다. 이는 장기적으로 모듈화에 도움이 될 것입니다.
마찬가지로, 계산 그래프 (일명 정적 그래프 )를 만들기 위해 빈 텐서를 전달하는 것은 새로운 아이디어가 아니지만 인기있는 텐서 플로우 라이브러리와 유사한 PyTorch 래퍼 라이브러리 Keops에서 철저히 탐구됩니다. 이 라이브러리는 프로그램을 디버깅하는 것이 불필요하게 복잡하다는 사실로 고통 받고 있습니다. 예를 들어, TensorFlow 사용자가 PyTorch 로 전환 한 시점까지 배치의 용이성이지만 개발의 통증으로 유명했습니다. 디버깅하는 동안 사람들은 변수 내부의 내용을보고, 잘못된 값이 포함되어 있는지 확인합니다. 그러나 정적 그래프는 관계 만 정의하기 때문에 값이 계산되지 않으므로 디버깅이 어렵습니다.
Koila 문자열, 정수 또는 파이썬 값으로 변환 될 때 열심히 평가함으로써이를 해결합니다. 이를 통해 더 직접적인 (필요한 경우) 메모리를 할당하고 자유롭게 해방하는 더 간단한 PyTorch 프로그램에 사용할 수없는 메모리 관리 기능을 유지하면서 원활한 디버깅이 가능합니다.
Tensor 와 LazyTensor 텐서 사이의 상호 작용). 이 코드는 많은 경우에 작동하지만 여전히 진행중인 작업입니다. 이것은 제한된 시간으로 인해 완전히 PyTorch 호환 라이브러리가 아닙니다. 생산 환경에서 사용하지 마십시오!
개방성과 포용성은 매우 심각하게 받아 들여집니다. 이 코드는 Apache 라이센스에 따라 사용할 수 있습니다. 다음 행동 강령을 따르십시오.