[基本NLP]Google Cloud-TPUとKoBigBirdモデルのKorQuad 2を利用する.0 Fine-tuning


NLP業界から見ると、私たちのよく知っているすべての発売会社は、巨大言語モデル(LLM)を先を争って発表しています.先ごろグーグルで公開されたPalm(Pathways Language Model)のパラメータはGPT-3(1750億個)の約3倍(5400億個)だった.
いずれにしても,長年にわたって,自然言語処理分野のこれらの事前訓練された言語モデルが基礎となり,必要となってきた.
ほとんどの場合、GPU演算を必要とするモデリングにはCollabが使用されます.(ただし、私は会社の口座でGCPのgpuの例を勝手に使っていますが、私はやはり良心的に人の顔色を見ています.👀 )
ただし、アカウントが無料の場合、GPUの低パフォーマンスとvramとセッション時間の制限が少ないため、不便を感じる可能性があります.(Colab Proを使うのは少し良いですが、これもオンデマンドではなく、セッション制限があります)
今回のリリースでは、クラウドTPUを無料で使用する方法について説明します.
次に、KoBigBirdモデルを使用してKorQuad 2データセットを調整する方法を紹介します(クラウドTPUではパーソナルPC/Colabへのアクセスが困難です).

1. TRC(TPU Research Cloud)


TPUを申請してクラウド(TRC)を検索することで、誰でもクラウドTPUを使用することができます.私は2回申請したことがありますが、申請後の最終承認には約2-3時間かかります.

1.1. TRC申請


TRCホームページのApply nowボタンをクリックして申請します.簡単な記入用紙が表示され、内容を記入して提出した後、初めて申請を完了します.

1.2. GCPプロジェクトを作成し、TPU APIを有効にする


しばらくお待ちください.クラウドTPUを使用する手順を含む次のメールが届きます.

  • Google Cloudプロジェクトの作成
    自分のGCPコンソールにインポートして新しいアイテムを作成すればよい.プロジェクトを作成すると、3番目のフォームで作成する必要がある「プロジェクト番号」(Project Number)が表示されます.

  • クラウドTPU APIの有効化
    GCPコンソール→Compute Engine→TPUに移動してTPU APIを有効にします.


  • フォームにアイテム番号を作成してコミットする
    「リンク」(Link)フォームで作成し、1で作成したアイテムのアイテム番号を発行します.
  • 送信後に待機すると、次のように別のメールが届きます.このメールを受け取ったら、クラウドTPUは今使えます!

    ここで注意しなければならないのは、この30日間の無料期間中、以下の3つのTPUノードを使用することができることです.
  • 5 on-demand Cloud TPU v2-8 device(s) in zone us-central1-f
  • 100 preemptible Cloud TPU v2-8 device(s) in zone us-central1-f
  • 5 on-demand Cloud TPU v3-8 device(s) in zone europe-west4-a
  • 次に作成する仮想マシンインスタンスとTPUノードは、上記の3つの情報に対して設定する必要があります.
    (TPUタイプおよび領域については、関連リンクを参照してください.)

    2.クラウドTPU設定


    2.1. VMインスタンスとTPUノードの作成


    🔥 Warning!🔥
    TRCはTCPサービスのみを無料でサポートし、vmインスタンスの作成時にvmインスタンスを使用して課金します.
    本実証ではKorBigBird githubの実験環境と同じ構成のためにKorbigBird finetunningにTPU v 3を配置した.8を使用します.
    コンソールに仮想マシンインスタンスとTPUノードを直接作成できますが、gcloud shellでコマンドで作成できます.(注:Run a calculation on a Cloud TPU VM by using PyTorch)
    # Create Compute Engine VM instance
    
    gcloud compute instances create jaehyeong-tpu-research-vm \
    --zone=europe-west4-a  \
    --machine-type=n1-standard-16  \
    --image-family=torch-xla \
    --image-project=ml-images  \
    --boot-disk-size=200GB \
    --scopes=https://www.googleapis.com/auth/cloud-platform
    TPU v3.8地域をヨーロッパ-west 4-aに設定し、マシンタイプは少なくともn 1-standard-16、bootdiskは少なくとも200 GBで、適切なテストを行うことを推奨します.
    # Create TPU node
    
    gcloud compute tpus create jaehyeong-tpu-research-node \
    --zone=europe-west4-a \
    --network=default \
    --version=pytorch-1.8 \
    --accelerator-type=v3-8
    TPUノード上の領域もeuropean-west 4-aとして指定され、アクセラレータタイプはv 3-8として指定される.
    上記の手順が完了すると、コンソールには、次のように各仮想マシンインスタンスとTPUが登録されていることが表示されます.


    2.2. 仮想マシンインスタンスへのTPUの接続


    VMインスタンスとTPUノードはまだ存在するため、VMインスタンスTPUの存在を通知する必要があります.
    このように、TPUに関連するすべての計算は、仮想マシンインスタンスではなくTPUノード上で行われる.
  • 仮想マシンインスタンス接続
    上記で作成したVMインスタンスにアクセスするには、次のコマンドを実行します.
    gcloud compute ssh {vm 인스턴스 명} --zone=europe-west4-a
  • TPU node ip
    TPUノードのIPをVMインスタンスに通知する必要があるため、IPアドレスを表示します.
    コマンド実行時の出力値ipAddressの値を確認します.
    gcloud compute tpus describe {TPU 노드 명} --zone=europe-west4-a
  • TPU IPアドレス設定
    torch-xla-1.8.1 venvをアクティブにした後、上記で確認したipAddressを優先パラメータとして登録します.
  • conda activate torch-xla-1.8.1
    
    export TPU_IP_ADDRESS={ipAddress}
    export XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
  • TPU check
    次の簡単なスクリプトを実行して、TPU接続が正しいかどうかを確認します.
  • import torch
    import torch_xla.core.xla_model as xm
    
    dev = xm.xla_device()
    t1 = torch.randn(3,3,device=dev)
    t2 = torch.randn(3,3,device=dev)
    print(t1 + t2)
    以下の出力値が発生した場合、TPUは正常に計算されます.
    tensor([[-0.2121,  1.5589, -0.6951],
            [-0.7886, -0.2022,  0.9242],
            [ 0.8555, -1.8698,  1.4333]], device='xla:1')

    3. KorQuAD 2.0 Finetuning by KorBigBird


    3.1. BigBird


    通常、BERTシリーズのモデルは、512個の入力シーケンスを受信することができる.
    これはTransformerモデルにおけるself-attention演算が入力シーケンス全体を参照して演算されるfull attentionベースであるため,演算量は常に入力シーケンス長の二乗に比例する.したがって、512個以上のタグのテキストを入力する場合、通常、512個以上のタグのタグを切断する必要がある.
    ただし、MRCタスクがコンテキスト全体に基づいて答えをエクスポートする必要がある場合、上記の方法では、答えを含む部分が切断される可能性があります.したがって、この場合、ドキュメント全体を最大入力シーケンスの速度で参照します.(たとえば、入力されたドキュメントの長さが1024より大きい場合、入力シーケンスが最大512のモデルは、ドキュメントを2つのステップにまたがらせます.)
    BigBirdモデルは上記の制限を克服するために提案されたモデルである.
    BigBirdモデルでは、入力シーケンスとして最大4096個のタグを受信することができ、BERTの8倍である.これはBigBirdが完全に注意するのではなくSpare-actionsに基づいているためかもしれない.

    3.2. KoBigBird finetuning


    多くの研究者が使用しているKoELECTRAモデルを共有した独白氏はKoBigBirdモデルの位置づけも行った.
    まず,KoBigBirdモデルをクローニングした.
    git clone https://github.com/monologg/KoBigBird.git
    その後、KoBigBird/finetuneディレクトリに移動します.このディレクトリには、plmとしてKoBigBirdモデルを使用して分類および問答タスクを実行できるデータと学習コードが含まれています.

  • まず、必要なパッケージをインストールします.
    pip install -r requirements.txt

  • 次のスクリプトを実行して、問題解決に関連するデータセットのダウンロード操作を行います.
    (TyDiQAとKorQuad 2.1データセットをダウンロードします.)
    bash download_qa_dataset.sh
  • KoBigBird/finetune/scriptsディレクトリには、様々なデータセットのfinetunningスクリプトファイルが含まれています.ここでは、run_korquad_2.shファイルを実行してKorQuadを最適化します.
    (非常に時間がかかるタスクなので、バックグラウンド実行を使用して結果値を中間的に表示することをお勧めします.)
    bash scripts/run_korquad_2.sh
  • を学習すると、モデルはKoBigBird/finetune/outputディレクトリに保存されます.