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

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

モデルの説明

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

始める前に

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

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

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

  2. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

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

    課金を有効にする方法について

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

リソースを設定する

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

Cloud Storage バケットを作成する

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

作成するバケットは、使用する仮想マシン(VM)と Cloud TPU デバイスまたは Cloud TPU スライス(複数の TPU デバイス)が存在するリージョンと同じリージョン内に作成する必要があります。

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

    Cloud Storage ページに移動

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

    • 任意の一意な名前
    • デフォルトのストレージ クラス: Regional
    • ロケーション: 単一の Cloud TPU デバイスを使用する場合は、表示されるデフォルト ロケーションを受け入れます。Cloud TPU Pod スライスを使用する場合、Cloud TPU Pod を利用できるリージョンを選択する必要があります。

ctpu ツールを使用する

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

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

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

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

    Cloud Shell を開く

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

  3. 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.13
    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 コマンドの実行が終了したら、シェル プロンプトが username@project から username@tpuname に変更されたことを確認します。変更されていれば、Compute Engine VM にログインしていることになります。

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

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

ローカルマシンで t2t-datagen を実行する場合は、このステップをスキップできます(pip install tensor2tensor の次に以下の t2t-datagen コマンドを参照)。

  • 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)$ TMP_DIR=/mnt/disks/mnt-dir/t2t_tmp

    ここで

    • YOUR-BUCKET-NAME は、Cloud Storage バケットの名前です。
    • DATA_DIR は、Cloud Storage の場所です。
    • TMP_DIR は、チュートリアルの開始時に Compute Engine VM に追加したディスク上の場所です。
  2. チュートリアルの開始時に Compute Engine VM に追加したディスクに一時ディレクトリを作成します。

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

    t2t-datagen のオーディオ インポートでは、標準化された波形を生成するために sox が使用されます。したがって、先にワークステーションにインストール(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

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

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

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

モデルのトレーニング

Cloud TPU でモデルをトレーニングするには、OUT_DIR を設定して、トレーナーにサイズの大きなバッチを短いシーケンスで実行させます。

(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

この手順が完了したら、より小さなバッチサイズですべてのシーケンスを実行するようにして、トレーニングを再度行います。

(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
    

次のステップ

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

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