- tokenizerの学習や、tokenizeはすべて終わっているものとします
- 学習の前に、データのtoken数を確認しておきます。
- 愚直にカウントしています。もっと早い方法があるはずです。
python count_tokens.py
-
算出されたtoken数を、configに反映させます。
- train_tokensを変更します。
- こうすると、1epoch分だけ学習されるようになります。
-
必要に応じ、同ファイルのパラメータを変更します。
- モデルパラメータもこのファイル内で色々といじれます
- global_batch_sizeを小さくすると、必要なVRAMを削減できます。
- VRAMの目安
- 125Mで、global_batch_size=128とすると、A100 (80GB) x2 で57GB x2 程度
- 300Mでは72 (zero stage 1)で75 GB x2
-
一番初めの実行はcompile?が入るようで、時間がかかります。
-
wandbを使うように設定を変更します。
- project名は、configのwandb-projectから変更してください。
cp original_codes/ds_config_gpt_TEMPLATE.json Megatron-DeepSpeed/examples_deepspeed/rebase/ds_config_gpt_TEMPLATE.json
- 学習の実行
bash 3_train_node1.sh
- 事前学習スクリプトが "> compiling and loading fused kernels ..." というところでスタック
- DeepSpeedのfused_kernelのbuildをやり直すため、一旦、削除する
rm -rf Megatron-DeepSpeed/megatron/fused_kernels/build/
- -9でプロセスがkill
- メモリ(RAM)不足なので、config.yamlのtrain_samplesを小さくする
- cuda out of memory
- GPUメモリ(VRAM)不足なので、config.yamlのglobal_batch_sizeを小さくする
- 無事に学習がおわると、こちらフォルダ内にモデルデータ群が生成されます。
- この中から、最新のcheckpointなどを選びます
- converrt_configを開き、設定します。
- input_model_dir: checkpointのフォルダ
- output_tokenizer_and_model_dir: huggingfaceのレポにuploadする際の名前
bash 4_convert_to_HF.sh
- HuggingFaceのレポジトリにuploadします。
- モデル名はconfigのhugging_face_nameで指定します。
6_upload.py
- Wandbとの連携