Koilaは
CUDA error: out of memory errorを解決します。コードの1行だけで修正し、忘れてください。

メインブランチは、プロジェクトの完全な再構造です(これは、それを完了するのに十分な時間がないため、現在ほとんど空です)。作業コードを確認するには、 v0.1.1タグを概念実証のためにチェックアウトします(すべての操作にわたって完全なサポートがなく、生産に適していません)。それを使用するには、ここからリリースv0.1.1をダウンロードしてください。
? CUDA error: out of memory error 。
Batchサイズが大きすぎると、勾配が自動的に蓄積されます。
? Pytorchコードを怠lazに評価して、コンピューティングパワーを節約します。
decutionは、バッチディメンションに沿って自動的にGPUフレンドリーな数字(2のパワー)に分割して、実行を加速します。
?最小限のAPI(すべての入力をラップするだけで十分です)。
RuntimeError: CUDA error: out of memory ?私たちは皆、その速度、効率、透明性のためにPyTorchが大好きですが、それは余分なことをしないことを意味します。 2017年以来多くのユーザーを悩ませてきた非常に一般的なエラーを防ぐなど。
このライブラリは、ネイティブのPyTorchよりも軽量のラッパーになることで、それを防ぐことを目的としています。テンソルがラップされると、ライブラリは残りのGPUメモリの量を自動的に計算し、適切なバッチサイズを使用して、モデルを使用するたびにバッチサイズを手動で微調整する必要がないようにします。
また、ライブラリは適切なバッチサイズをGPUに自動的に使用します。大きなバッチを使用すると、常に処理をスピードアップするとは限らないことをご存知ですか?このライブラリでも自動的に処理されています。
KoilaコードはPyTorchコードであるため、 PyTorchフードの下で実行されるため、心配することなく両方を一緒に使用できます。
ああ、そしてすべてのコードのすべて! ?
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の静的/怠zyな評価に触発されています。最初にグラフを構築し、必然的にモデルを実行することにより、モデルはすべての情報にアクセスして、必然的にモデルを計算するために必要なリソースの量を決定する必要があります。
メモリ使用量の観点から、モデルで使用される変数のメモリ使用量を計算するには、一時変数の形状のみが必要です。たとえば、 +は等しいサイズの2つのテンソルを取り入れ、入力サイズに等しいサイズのテンソルを出力し、 log 1つのテンソルを取り入れ、同じ形状の別のテンソルを出力します。放送はそれよりも少し複雑になりますが、一般的なアイデアは同じです。これらすべての形状を追跡することにより、フォワードパスで使用されるメモリの量を簡単に伝えることができます。それに応じて最適なバッチサイズを選択します。
いいえ。実際、形状の計算とサイズとメモリの使用量の計算は、多くの作業のように聞こえます。ただし、96層を持つGPT-3のような巨大なモデルでさえ、コンピューティンググラフに数百ノードしかないことに注意してください。 Koilaのアルゴリズムは線形時間に実行されるため、最新のコンピューターはこのようなグラフを即座に処理できます。
コンピューティングのほとんどは、個々のテンソルの計算とデバイス全体のテンソルの転送に費やされています。そして、これらのチェックはとにかくバニラ・PyTorchで起こることに留意してください。いいえ、まったく遅くはありません。
このプロジェクトは、もともと世界で最も怠zyな種であるコアラと名付けられました。このプロジェクトは、テンソルの怠zyな評価に関するものです。ただし、その名前はPypiで撮影されているため、別の名前を使用する以外に選択肢がありませんでした。 Koilaは私によって構成された言葉であり、 voila (フランス語の言葉)と同様に発音されるので、コアラのように聞こえます。
あなたが見るものが好きなら、これを星(★)にすることを検討してください!
インターネット上の多くの同様のライブラリにもかかわらず、なぜこのプロジェクトを構築したのですか?
バッチサイズの検索は新しいものではありません。実際、人気のある稲妻にはそれがあります。
Lightningのバッチサイズ検索は、独自のエコシステムに深く統合されています。モデルのDataLoader 、そのモデルを使用して、それに応じてモデルをトレーニングする必要があります。稲妻を使用するための教師付き学習タスクをリファクタリングするのは比較的簡単ですが、環境とのやり取りが必須である強化学習コードベースで同じことをするのは本当に苦痛です。
それに比べて、 Koila非常に軽いPytorchラッパーであるため、Pytorchが機能するときに機能するため、既存のコードに最大限の柔軟性と最小限の変更を提供します。
ただし、新しいコードを書いている場合、Lightningはコードスタイルのより良いパターンを強制するため、長期的にはモジュール性に役立つため、Lightningが推奨されることに注意してください。
同様に、空のテンソルを渡して計算グラフ(別名静的グラフ)を構築することは新しいアイデアではありませんが、人気のTensorflowライブラリと同様のPyTorchラッパーライブラリKeopsで徹底的に調査されています。これらのライブラリは、それらのデバッグプログラムが不必要に複雑であるという事実に苦しんでいます。たとえば、 TensorFlow 、展開の容易さであるが開発の痛みで知られていました。これは、ユーザーがPyTorchに切り替えたところまでです。デバッグ中、人々は変数の中にあるものを見て、それが間違った値を含んでいるかどうかを確認したいと思っています。ただし、静的グラフは関係のみを定義するため、値は計算されないため、デバッグが困難になります。
Koila 、文字列、整数、またはPython値に変換されるときに熱心に評価することでそれを解決します。これにより、シームレスなデバッグが可能になり、メモリ管理を実行する能力を維持しながら、より単純なPyTorchプログラムでは使用できません。
Tensor SとLazyTensor Sの相互作用)。コードは多くのケースで動作しますが、それでも進行中の作業です。これは、時間が限られているため、(まだ)完全にPyTorch互換のライブラリではありません。生産環境で使用しないでください!
開放性と包括性は非常に真剣に受け止められています。コードはApacheライセンスの下で利用できます。次の行動規範に従ってください。