見出し画像

失敗:mlxでのQwen-72B-Chatの4bits量子化 on MacbookPro 64g


前の記事の続きです。 convertのオプションを試してみて、Qwen-72Bの量子化にトライしましたが、失敗しました。

まずは、オプションの試しです。

python convert.py --mlx-path "mlx_tinymodel"

モデルはキャッシュにあるようで、一瞬で終わりました。
指定した通りに、mlx_tinymodel のdirectoryができました。

python qwen.py --model-path "mlx_tinymodel" --prompt "what is the meaning of life?"
what is the meaning of life? I don't know. I don't know what the answer is. I don't know what the answer is. I don't know what the answer is. I don't know what the answer is. I don't know what the answer is. I don't know what the answer is. I don't know what the answer is. I don't know what the answer is. I don't know what the answer is. I don't know what the answer is. I don't know what
(mlxenv) qwen %

Qwen-72B-Chatの4bits量子化を試してみます。グループサイズはとりあえず勘で256を指定しました。出力先はmlx_72Bmodelを指定。

python convert.py --model "Qwen/Qwen-72B-Chat" --mlx-path "mlx_72Bmodel" -q --q-group-size 256 --q-bits 4

macbook、ほっとくとスリープになる設定なので、ダウンロード中にスリープして、ネットが切断されました。

スリープ設定を解除しいて、延々数時間かけてダウンロードは無事に終わりました。

その後、頑張りましたが、以下のエラー表示で止まります。

(mlxenv) qwen % python convert.py --model "Qwen/Qwen-72B-Chat" --mlx-path "mlx_72Bmodel" -q --q-group-size 256 --q-bits 4
Loading checkpoint shards: 80%|████████████▉ | 66/82 [01:36<00:29, 1.83s/it]zsh: killed python convert.py --model "Qwen/Qwen-72B-Chat" --mlx-path "mlx_72Bmodel" -q
(mlxenv) qwen % /Users/liberoscholar/ai/envs/mlxenv/lib/python3.11/multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be 1 leaked semaphore objects to clean up at shutdown
warnings.warn('resource_tracker: There appear to be %d '

だいたいチェックポイントの60過ぎでエラーがでるので、その辺りを含めてGPT-4に尋ねてみました。

スクリプトがチェックポイントの断片を読み込んでいる段階でエラーが発生し、メモリの問題を示している場合、特に同じ箇所で一貫して失敗する場合、プロセスがシステムで利用可能なメモリよりも多くのメモリを消費している可能性が高いです。

大きなモデルやデータセットを扱う場合、メモリの要件が利用可能なメモリを超えることがよくあります。特に、モデルやデータが効率的に読み込まれていない場合はそうです。これに対処するには、以下のことができます。

1. **メモリ使用量を確認する:**
アクティビティモニタを使って、システムのメモリ使用量を確認してください。これにより、どのくらいのメモリが使用されていて、スクリプトを開始する前にどのくらいのメモリが利用可能かがわかります。

2. **不要なアプリケーションを閉じる:**
スクリプトを実行する前に、必要でない他のアプリケーションやバックグラウンドプロセスを閉じて、できるだけ多くのメモリを解放してください。

3. **仮想メモリを増やす:**
macOSは、ディスクスペースを使って使用可能なメモリを拡張する仮想メモリを使用します。仮想メモリシステムが使用できる十分な空きディスクスペースがあることを確認してください。ディスクがほぼいっぱいの場合は、不要なファイルを削除したり、外部ストレージに移動したりしてください。

4. **スクリプトを最適化する:**
スクリプトを見直して、データをより効率的に読み込む方法がないかを確認してください。これには、以下のようなことが含まれます。
- データを小さなチャンクで読み込む。
- メモリを消費する少ないデータ構造を使用する。
- 不要になったリソース(変数やオブジェクトなど)をできるだけ早く解放する。

5. **メモリの多いマシンを使用する:**
メモリの制限に常にぶつかる場合は、スクリプトをより多くのRAMを搭載したマシンで実行する必要があるかもしれません。物理的なメモリの多いマシンにアクセスできない場合は、必要な仕様のマシンをレンタルできるクラウドベースのサービスを検討してください。

6. **チェックポイントの読み込み戦略:**
スクリプトがモデルのチェックポイントを読み込んでいる場合は、一度に一つずつ読み込んで、次に移る前に前のものをメモリから削除することを検討してください(まだ行っていない場合)。

7. **モデルチェックポイントを簡素化する:**
可能であれば、モデルチェックポイントのよりコンパクトなバージョンを使用してください。一部のフレームワークでは、メモリ要件を半分にできる低精度モード(FP32の代わりにFP16など)をサポートしています。

8. **スワップ領域を増やす:**
パフォーマンスには理想的ではありませんが、スワップ領域を増やすと、RAMが枯渇したときにバッファを提供できます。しかし、macOSはスワップ領域を自動的に管理するので、他のUnixシステムのように手動で調整する直接的な方法はありません。起動ディスクに十分な空き容量があることが、macOSがスワップを効果的に処理するための最善の方法です。

9. **バッチで実行する:**
スクリプトがバッチ処理をサポートしている場合は、データを小さなバッチで処理して、メモリ使用量を減らしてください。

メモリ使用量を十分に減らすことができない場合は、単純にロードを処理するためにより多くのRAMを搭載したマシンが必要になるかもしれません。データサイエンスや機械学習のタスクには大きな計算リソースが必要になることが珍しくなく、大きなモデルチェックポイントは特に要求が高いです。

GPT-4の英語解答をBingCopilotで翻訳

とりあえず再起動して、dropboxなど常駐ソフトを落として、チャレンジしましたが、エラーが起きるポイントがちょっと上昇したところで同じエラーです。たぶん、私のMacbookProには手が負えない大きさなのだろうと勝手に想像してます。

使用済みメモリ50G、スワップ使用量50Gぐらいのところで落ちていました。

失敗の覚え書き投稿です。


#AI #AIでやってみた #やってみた #Qwen #LLM #Macbookpro #mlx

この記事が参加している募集

#やってみた

37,271件

この記事を最後までご覧いただき、ありがとうございます!もしも私の活動を応援していただけるなら、大変嬉しく思います。