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 でこれらのバケットにアクセスできます。