自動音声認識(ASR)モデルの実行

このチュートリアルでは、一般公開されている Librispeech ASR コーパスのデータセットを Tensor2Tensor とともに使用して、Cloud TPU 上で自動音声認識(ASR)モデルのトレーニングを行う方法を説明します。

モデルの説明

音声認識モデルは、Tensor2Tensor ライブラリのモデルの 1 つです。 Tensor2Tensor(T2T)は、ディープ ラーニング モデルとデータセットのライブラリであり、また、モデルのトレーニングとデータのダウンロードや準備に使用できるスクリプトのセットです。このモデルでは、音声からテキストへの変換が行われます。

始める前に

このチュートリアルを開始する前に、次のステップを使用して、Google Cloud Platform プロジェクトが正しく設定されていることを確認します。

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP Console のプロジェクト セレクタのページで、GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. このチュートリアルでは、Google Cloud Platform の課金対象となるコンポーネントを使用します。費用を見積もるには、Cloud TPU の料金ページを確認してください。不要な課金を回避できるよう、このチュートリアルを完了したら、作成したリソースを必ずクリーンアップしてください。

リソースを設定する

このセクションでは、チュートリアルで使用する Cloud Storage のストレージ、VM、Cloud TPU の各リソースを設定する方法を説明します。

Cloud Storage バケットを作成する

モデルのトレーニングに使用するデータとトレーニング結果を格納するには、Cloud Storage バケットが必要です。このチュートリアルで使用する ctpu up ツールは、Cloud TPU サービス アカウントのデフォルトの権限を設定します。権限の詳細な設定が必要な場合は、アクセスレベル権限をご覧ください。

バケットのロケーションは、仮想マシン(VM)および TPU ノードと同じリージョンにする必要があります。VM と TPU ノードは、リージョン内のサブディビジョンである特定のゾーンに配置されます。

  1. GCP Console の Cloud Storage ページに移動します。

    Cloud Storage ページに移動

  2. 次のオプションを指定して新しいバケットを作成します。

    • 任意の一意な名前
    • デフォルトのストレージ クラス: Standard
    • ロケーション: TPU ノードを作成する予定のリージョンと同じリージョンにバケットのロケーションを指定します。各種の TPU タイプをどこで使用できるかについては、TPU タイプとゾーンをご覧ください。

ctpu ツールを使用する

このセクションでは、Cloud TPU プロビジョニング ツールctpu)を使用して Cloud TPU プロジェクトのリソースを作成、管理する方法を説明します。リソースは、同じ名前が付けられた仮想マシン(VM)と Cloud TPU リソースで構成されます。これらのリソースは、作成したバケットと同じリージョン / ゾーンに存在する必要があります。

VM リソースと TPU リソースを設定するには、gcloud コマンドまたは Cloud Console を使用することもできます。Compute Engine VM と Cloud TPU リソースの設定から管理までのすべての手順については、TPU の作成と削除ページをご覧ください。

ctpu up を実行してリソースを作成する

  1. Cloud Shell ウィンドウを開きます。

    Cloud Shell を開く

  2. gcloud config set project <Your-Project> を実行して Cloud TPU を作成するプロジェクトを使用します。

  3. Cloud TPU デバイスまたは Pod スライスのいずれかを示すフラグを指定して ctpu up を実行します。フラグのオプションと説明については、CTPU リファレンスをご覧ください。

  4. Cloud TPU デバイスを設定します。

    $ ctpu up 

    構成に関する次のメッセージが表示されます。

    ctpu will use the following configuration:
    
    Name: [your TPU's name]
    Zone: [your project's zone]
    GCP Project: [your project's name]
    TensorFlow Version: 1.14
    VM:
     Machine Type: [your machine type]
     Disk Size: [your disk size]
     Preemptible: [true or false]
    Cloud TPU:
     Size: [your TPU size]
     Preemptible: [true or false]
    
    OK to create your Cloud TPU resources with the above configuration? [Yn]:
    

    y キーを押して、Cloud TPU リソースを作成します。

ctpu up コマンドにより、仮想マシン(VM)と Cloud TPU サービスが作成されます。

これ以降、接頭辞 (vm)$ は Compute Engine VM インスタンスでコマンドを実行する必要があることを意味します。

Compute Engine VM を確認する

ctpu up コマンドの実行が終了したら、shell プロンプトが username@project から username@tpuname に変更されたことを確認します。変更されていれば、Compute Engine VM にログインしていることになります。

VM にディスク容量を追加する

T2T は、t2t-datagen スクリプトで多くの一般的なオープンソース データセットのデータ生成を適切にパッケージ化します。このスクリプトはデータをダウンロードして前処理し、トレーニングの準備を整えます。これを行うには、ローカルのディスク容量が必要です。

ctpu up を使用して Compute Engine VM を作成した場合は、VM に 250 GB のディスク容量が割り当てられているので、このステップをスキップできます。gcloud コマンドまたは Cloud Console を使用して Compute Engine VM を設定したときに、VM ディスクサイズを 200 GB 以上に指定していない場合は、次の手順を使用します。

  • Compute Engine ガイドに従って、Compute Engine VM にディスクを追加します。
  • ディスクサイズを 200 GB(推奨最小サイズ)に設定します。
  • VM を削除する際にディスクが削除されるように、[インスタンスを削除したときの動作] を [ディスクを削除] に設定します。

新しいディスクのパスをメモします。例: /mnt/disks/mnt-dir

トレーニング用と評価用のデータセットを生成する

Compute Engine VM の場合:

  1. ディレクトリに対して、次の環境変数を作成します。

    (vm)$ STORAGE_BUCKET=gs://YOUR-BUCKET-NAME
    (vm)$ DATA_DIR=$STORAGE_BUCKET/data/
    (vm)$ OUT_DIR=$STORAGE_BUCKET/OUT_DIR
    (vm)$ export TMP_DIR=YOUR-TMP-DIRECTORY

    ここで

    • YOUR-BUCKET-NAME は、Cloud Storage バケットの名前です。
    • DATA_DIR は、トレーニングと評価のデータを保持する Cloud Storage の場所です。
    • OUT_DIR は、モデルのトレーニングの際にチェックポイントとサマリーが保存されるディレクトリを指定します。フォルダがない場合は、プログラムによって作成されます。Cloud TPU を使用する場合、output_dir は Cloud Storage のパス(gs://...)である必要があります。既存のフォルダを再利用して、現在のチェックポイント データを読み込み、追加のチェックポイントを保存できます。
    • YOUR-TMP_DIRECTORY は、一時データの格納に使用する場所です。新しいディスクを Compute Engine VM に追加した場合、これは、追加されたディスク上の場所になります(例: /mnt/disks/mnt-dir/t2t_tmp)。それ以外の場合は、VM 上の一時ディレクトリになります(例: /tmp/t2t_tmp)。
  2. 新しいディスクを Compute Engine VM に追加した場合は、追加したディスク上に一時ディレクトリを作成します。

    (vm)$ mkdir $TMP_DIR
  3. t2t-datagen スクリプトを使用して、完全版のデータセットと、サイズが小さいクリーン バージョンの両方を生成します。サイズが小さいほうは、評価に使用します。

    t2t-datagen でのオーディオ インポートでは、sox を使用して、正規化された波形が生成されます。それを Compute Engine VM にインストールしてから、後続の t2t-datagen コマンドを実行します。

    (vm)$  sudo apt-get install sox
    (vm)$  t2t-datagen --problem=librispeech --data_dir=$DATA_DIR --tmp_dir=$TMP_DIR
    (vm)$  t2t-datagen --problem=librispeech_clean --data_dir=$DATA_DIR --tmp_dir=$TMP_DIR

問題 librispeech_train_full_test_clean のトレーニングは完全版のデータセットで行われますが、評価はクリーンなデータセットで行われます。

クリーンなデータセットの小さいバージョンである librispeech_clean_small を使用することもできます。

Cloud Storage のデータを表示するには、Google Cloud Platform Console に移動し、左側のメニューから [ストレージ] を選択します。このチュートリアルで作成したバケットの名前をクリックします。

モデルのトレーニング

Cloud TPU でモデルをトレーニングするには、サイズの大きなバッチと省略したシーケンスを使用してトレーナーを実行します。

(vm)$ t2t-trainer \
  --model=transformer \
  --hparams_set=transformer_librispeech_tpu \
  --problem=librispeech_train_full_test_clean \
  --train_steps=210000 \
  --eval_steps=3 \
  --local_eval_frequency=100 \
  --data_dir=$DATA_DIR \
  --output_dir=$OUT_DIR \
  --use_tpu \
  --cloud_tpu_name=$TPU_NAME

この手順が完了したら、より小さなバッチサイズと完全版のシーケンスを使用し、ステップ数を増やしてトレーニングを再実行します。v3-8 TPU ノードでは、このトレーニングが完了するまでに約 11 時間かかります。

(vm)$ t2t-trainer \
  --model=transformer \
  --hparams_set=transformer_librispeech_tpu \
  --hparams=max_length=295650,max_input_seq_length=3650,max_target_seq_length=650,batch_size=6 \
  --problem=librispeech_train_full_test_clean \
  --train_steps=230000 \
  --eval_steps=3 \
  --local_eval_frequency=100 \
  --data_dir=$DATA_DIR \
  --output_dir=$OUT_DIR \
  --use_tpu \
  --cloud_tpu_name=$TPU_NAME

クリーンアップ

このトピックで使用したリソースについて GCP アカウントに課金されないようにする手順は次のとおりです。

  1. Compute Engine VM との接続を解除します。

    (vm)$ exit
    

    プロンプトが user@projectname に変わります。これは、現在、Cloud Shell 内にいることを示しています。

  2. Cloud Shell で、Cloud TPU の設定時に使用した --zone フラグを指定して ctpu delete を実行し、Compute Engine VM と Cloud TPU を削除します。

    $ ctpu delete [optional: --zone]
    
  3. TPU の使用に対して不要な料金が発生しないように、ctpu status を実行してインスタンスが割り当てられていないことを確認します。削除には数分かかることがあります。次のようなレスポンスは、割り当てられたインスタンスがないことを示します。

    2018/04/28 16:16:23 WARNING: Setting zone to "us-central1-b"
    No instances currently exist.
            Compute Engine VM:     --
            Cloud TPU:             --
    
  4. 次に示すように gsutil を実行します。YOUR-BUCKET-NAME の部分は、このチュートリアルで作成した Cloud Storage バケット名に置き換えてください。

    $ gsutil rm -r gs://YOUR-BUCKET-NAME
    

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。