1

Databricks から GPU クラスター (p2.xlarge) で horovod.torch を実行しようとしています。

horovod は AllReduce を使用してノード間でパラメーターを通信するため、各ワーカー ノードはデータセット全体を読み込み、異なるパーティションで作業する必要があります。各反復の後、すべてのノードは AllReduce によって他のノードからパラメーター値を取得し、それらの平均を取得して独自のパラメーターを更新します。

私の理解では、これは SPMD (single program multiple data) です。これは、各ワーカー ノードが同じデータセット全体をロードする必要があるためです。

各ワーカーノードからデータセット全体をロードする必要がありますよね?

私のコード:

import horovod.torch as hvd
from sparkdl import HorovodRunner 


def test1():
    hvd.init()
    train_df = spark.read.parquet("s3://my_data/").cache()
    print("load data done")
  

hr = HorovodRunner(np=2)
hr.run(test1)

しかし、私はエラーが発生しました:

例外: ブロードキャスト変数、アクション、または変換から SparkContext を参照しようとしているようです。SparkContext はドライバーでのみ使用でき、ワーカーで実行されるコードでは使用できません。詳細については、SPARK-5063 を参照してください。

スパークは複数のコンテキストを許可していないようです?

また、各ワーカーで新しいローカル Spark セッションを作成しようとしました。

def test1():
    hvd.init()

    from pyspark.sql import SparkSession

    spark = SparkSession \
          .builder \
          .appName("Python Spark SQL example") \
          .config("spark.some.config.option", "some-value") \
          .getOrCreate()

    train_df = spark.read.parquet("s3://my_data/").cache()
  

hr = HorovodRunner(np=2)
hr.run(test1)

エラーが発生しました:

[1,1]<stderr>:Error: Could not find or load main class org.apache.spark.launcher.Main
[1,1]<stderr>:/databricks/spark/bin/spark-class: line 101: CMD: bad array subscript

Spark を使用して各ワーカー ノードにデータをロードする方法は?

spark が他のノードが独自の sparksession を作成することを許可しない場合、 horovod の各ワーカー ノードにデータをロードする方法は?

4

0 に答える 0