Dataflow と Cloud Storage FUSE を使用して ML データを処理する

このページでは、Dataflow と Cloud Storage FUSE を使用して、ML タスクのデータセットを処理する方法について説明します。

ML タスクを扱う場合、Dataflow を使用して大規模なデータセットを処理できます。ただし、ML に使用される一般的なソフトウェア ライブラリ(OpenCV など)には、入力ファイルに関する要件があります。多くの場合、ファイルにアクセスする際に、クラウドベースのストレージからではなく、ローカルのパソコンのハードドライブに保存されているかのようにアクセスする必要があります。この要件によって操作が困難になり、遅延が生じます。解決策として、パイプラインで入力用に特別な I/O コネクタを使用するか、処理前に Dataflow 仮想マシン(VM)にファイルをダウンロードできます。このような解決策は非効率的なことがよくあります。

Cloud Storage FUSE を使用すれば、こうした非効率的な解決策を回避できます。Cloud Storage FUSE を使用すると、Cloud Storage バケットを Dataflow VM にマウントできます。これにより、Cloud Storage 内のファイルがローカル ファイルのように表示されます。その結果、これらのデータに直接アクセスでき、ML ソフトウェアを事前にダウンロードする必要がありません。

利点

ML タスクに Cloud Storage FUSE を使用するメリットは次のとおりです。

  • Cloud Storage でホストされている入力ファイルには、Dataflow VM でローカル ファイル システム セマンティクスを使用してアクセスできます。
  • データへのアクセスはオンデマンドで行われるため、入力ファイルを事前にダウンロードしておく必要はありません。

サポートと制限事項

  • Dataflow と Cloud Storage FUSE を使用するには、インターネット アクセスの要件を満たすために、外部 IP アドレスを使用してワーカー VM を構成する必要があります。

Cloud Storage FUSE で使用するバケットを指定する

VM にマウントする Cloud Storage バケットを指定するには、--experiments フラグを使用します。複数のバケットを指定するには、バケット名をセミコロン区切り文字(;)で区切って指定します。

形式は次のとおりです。

--experiments="gcsfuse_buckets=CONFIG"

次のように置き換えます。

  • CONFIG: Cloud Storage エントリのセミコロン区切りリスト。各エントリは次のいずれかです。

    1. BUCKET_NAME: Cloud Storage バケット名。例: dataflow-samplesバケットモードを省略すると、バケットは読み取り専用として扱われます。

    2. BUCKET_NAME:MODE: Cloud Storage バケット名とそれに関連付けられたモード。MODEro(読み取り専用)または rw(読み取り / 書き込み)のいずれかです。

      例:

      --experiments="gcsfuse_buckets=read-bucket1;read-bucket2:ro;write-bucket1:rw"
      

      この例では、モードを指定することで次のようになります。

      • gs://read-bucket1 は読み取り専用モードでマウントされます。
      • gs://read-bucket2 は読み取り専用モードでマウントされます。
      • gs://write-bucket1 は読み取り / 書き込みモードでマウントされます。

    Beam パイプライン コードは、/var/opt/google/gcs/BUCKET_NAME でこれらのバケットにアクセスできます。