分散アプリケーションを簡単に作成

分散アプリケーションを簡単に作成

[[420515]]

計算負荷の高いタスクに直面した場合、マルチプロセスに加えて分散コンピューティングが必要になります。 Python で分散コンピューティングを実装するにはどうすればよいでしょうか?今日は、Ray を使用する非常に簡単な方法を紹介します。

レイとは何か

Ray は、動的グラフ コンピューティング モデルを使用し、分散アプリケーションを作成するためのシンプルで汎用的な API を提供する Python ベースの分散コンピューティング フレームワークです。とても便利です。デコレータを使用すると、ごくわずかなコードを変更するだけで、元々単一のマシンで実行されていた Python コードの分散コンピューティングを簡単に実装できます。現在は主に機械学習に使用されています。

Ray の特徴:

1. 分散アプリケーションを構築および実行するためのシンプルなプリミティブを提供します。

2. ユーザーがコードをほとんどまたはまったく変更せずに、単一マシンのコードを並列化できるようにします。

3. Ray Core には、複雑なアプリケーションをサポートするためのアプリケーション、ライブラリ、ツールの大規模なエコシステムが含まれています。 Tune、RLlib、RaySGD、Serve、データセット、ワークフローなど。

Rayをインストールする

公式バージョンをインストールする最も簡単な方法:

  1. pip インストール -U ray
  2. pip インストール'ray[デフォルト]'  

Windowsシステムの場合は、Visual C++ランタイムをインストールする必要があります。

その他のインストール方法については、公式ドキュメントを参照してください。

Rayの使用

デコレータは分散コンピューティングを処理できます。

  1. レイをインポート
  2. レイ.init()
  3.  
  4. レイ・リモート
  5. 定義f(x):
  6. x * xを返す
  7.  
  8. futures = [f.remote(i) はirange(4)]内にある場合
  9. print(ray.get(futures)) # [0, 1, 4, 9]

まず ray.init() を実行し、分散タスクを実行する関数の前にデコレータ @ray.remote を追加して分散コンピューティングを実装します。デコレータ @ray.remote はクラスを装飾することもできます。

  1. レイをインポート
  2. レイ.init()
  3.  
  4. レイ・リモート
  5. クラス Counter(オブジェクト):
  6. __init__(self)を定義します。
  7. 自分.n = 0
  8.  
  9. def増分(自己):
  10. 自己.n += 1
  11.  
  12. def読み取り(自己):
  13. 自己.nを返す
  14.  
  15. カウンター = [Counter.remote()i範囲(4)]
  16. tmp1 = [カウンター内のcc.increment.remote()]
  17. tmp2 = [カウンター内のcc.increment.remote()]
  18. tmp3 = [カウンター内のcc.increment.remote()]
  19. 先物 = [c.カウンター内のc.remote()を読み取ります]
  20. print(ray.get(futures)) # [3, 3, 3, 3]

もちろん、前述の分散コンピューティングは、分散形式で、自分のコンピュータ上で実行されます。プログラムの実行中に、http://127.0.0.1:8265/#/ と入力して、分散タスクの実行ステータスを表示できます。

では、Ray クラスター コンピューティングをどのように実装するのでしょうか?続きをお読みください。

レイクラスターの使用

Ray の強みの 1 つは、同じプログラムで複数のマシンを活用できることです。もちろん、Ray は 1 台のマシン上でも実行できます。通常は、マシンは 1 台しかないからです。しかし、本当の力は、マシンのクラスター全体で Ray を使用することです。

Ray クラスターは、ヘッド ノードとワーカー ノードのセットで構成されます。まずヘッドノードを起動し、ヘッドノードのアドレスをワーカーノードに割り当てて、クラスターを形成する必要があります。

Ray Cluster Launcher を使用してマシンを構成し、マルチノード Ray クラスターを起動できます。クラスター ランチャーは、AWS、GCP、Azure、Kubernetes、Alibaba Cloud、オンプレミス、Staroid、さらにはカスタム ノード プロバイダーでも使用できます。

Ray クラスターは Ray Autoscaler も活用できます。これにより、Ray はクラウド プロバイダーと対話して、仕様やアプリケーションのワークロードに基づいてインスタンスを要求またはリリースできます。

それでは、Ray クラスターの機能を簡単に説明しましょう。ここでは、Docker を使用して 2 つの Ubuntu コンテナを起動し、クラスターをシミュレートします。

  • 環境1: ヘッドノードとして172.17.0.2
  • 環境 2: ワーカー ノードとして 172.17.0.3。ワーカーノードは複数存在できます。

具体的な手順:

1. Ubuntuイメージをダウンロードする

  1. docker プル Ubuntu

2. Ubuntuコンテナを起動し、依存関係をインストールする

最初の開始

  1. docker run -it --name ubuntu-01 ubuntu bash  

2番目を開始

  1. docker run -it --name ubuntu-02 ubuntu bash  

IP アドレスを確認します:

  1. $ docker 検査 -f "{{ .NetworkSettings.IPAddress }}" ubuntu-01
  2. 172.17.0.2
  3. $ docker 検査 -f "{{ .NetworkSettings.IPAddress }}" ubuntu-02
  4. 172.17.0.3

次に、コンテナにそれぞれpython、pip、rayをインストールします。

  1. aptアップデート&& apt インストール python3
  2. python3-pipをインストールします
  3. pip3 インストール ray

3. ヘッドノードとワーカーノードを起動する

コンテナの 1 つをヘッド ノードとして選択し、ここでは 172.17.0.2 を選択して、次を実行します。

  1. レイスタート--head --node-ip-address 172.17.0.2  

デフォルトのポートは 6379 です。--port パラメータを使用して、デフォルトのポートを変更できます。起動後の結果は次のとおりです。

警告を無視するとプロンプトが表示されます。他のノードをヘッドにバインドする場合は、次のようにします。

  1. レイスタート--address='172.17.0.2:6379' --redis-password='5241590000000000'  

別のノードで上記のコマンドを実行して、ワーカー ノードを起動します。

シャットダウンするには、次を実行します。

  1. レイストップ

4. タスクを実行する

任意のノードを選択し、次のスクリプトを実行して、ray.init() 関数のパラメータを変更します。

  1. コレクションからカウンターをインポート
  2. インポートソケット
  3. インポート時間 
  4.  
  5. レイをインポート
  6.  
  7. ray.init(アドレス= '172.17.0.2:6379'、_redis_password= '5241590000000000' )
  8.  
  9. print( '' 'このクラスターは
  10. 合計{ }ノード
  11. {}CPU リソース合計
  12. '' '.format(len(ray.nodes()), ray.cluster_resources()[' CPU']))
  13.  
  14. レイ・リモート
  15. f() を定義します:
  16. 時間.sleep(0.001)
  17. # IP アドレスを返します
  18. socket.gethostbyname(socket.gethostname())を返します
  19.  
  20. object_ids = [f.remote() _範囲(10000)]
  21. ip_addresses = ray.get(オブジェクトID)
  22.  
  23. print( '実行されたタスク' )
  24. Counter(ip_addresses).items()ip_address、num_tasksの場合:
  25. print( '{} の {} 個のタスク' .format(num_tasks, ip_address))

実行結果は次のとおりです。

172.17.0.2 は 4751 個のタスクを実行し、172.17.0.3 は 5249 個のタスクを実行し、分散コンピューティングの効果を実現していることがわかります。

最後の言葉

Ray を使用すると、Python のマルチプロセスを使用せずに並列コンピューティングを実装できます。今日の機械学習は主に計算集約型のタスクであり、分散コンピューティングの助けがなければ、速度は非常に遅くなります。 Ray は、分散コンピューティングを簡単に実装するためのソリューションを提供します。公式ドキュメントには非常に詳細なチュートリアルと例が記載されています。ご興味がございましたら、ぜひご覧ください。

もし役に立つなら、私をフォローして毎日 Python テクノロジーを学んでみてはいかがでしょうか。

<<:  HarmonyOSJS 分散機能 - 学習ノート

>>:  1分でDockerを使って新しいSentry-CLIを使い始める - バージョンを作成する

推薦する

小売業界におけるパブリッククラウドの情報セキュリティに関する議論

⚠️パブ​​リッククラウドのセキュリティインシデント⚠️過去 6 か月間に、小売業界ではパブリック ...

くそったれ28のルール

28 のルールは、すべての友人が知っていると思います。この黄金律がもたらす影響も、極めて普通で広範囲...

ベテランSEO:心が大きければ大きいほど、舞台も大きくなります

最近、SEO に取り組む人は皆、自分が何を望んでいるのかを無視していることに気づきました。実際、SE...

ウェブマスターネットワークニュース:ウェブサイト取引が急増、民生銀行が電子商取引に挑戦

1. アリババとテンセントがWeChatプラットフォーム上で競争し、起業家が損害を被るA5ウェブマス...

onetechcloud: 香港 VPS、1Gbps 帯域幅、20% 割引、最低 52 元、1G メモリ/1 コア/20GSSD/600G トラフィック

onetechcloudは、デフォルトの帯域幅が1Gbpsの香港vpsシリーズを追加し、NTT/CM...

extravm: 米国製高周波サーバー (5.3GHz)、複数のモデル、月額 149 ドル、i9-10900K/32GDDR4/1TNVMe/4IP/1Gbps 帯域幅

extravm は、メインの DDoS 対策 VPS サービスに加えて、ハイエンド、高性能、高周波数...

raksmart: クラウドサーバー 129 元/年、香港\日本\サンノゼ\ロサンゼルス、2G メモリ\1 コア\40g ハードディスク\

raksmart は現在、香港、日本、サンノゼ、ロサンゼルスのデータセンターのクラウド サーバー (...

有能なウェブマスターになる方法について語る [パート 2]

昨日はそのうちのいくつかについて簡単にお話ししましたが、今日は残りの側面についてお話しします。 9....

クラウドでのデータ管理を簡素化

企業がクラウドネイティブ データベースの使用を拡大するにつれ、データの複雑さの海に溺れつつあります。...

予算がなくてやめたいですか?お金がなくてもASOをプレイする方法を教えます!

上司は常にASOに成果を上げるよう促していますが、部下は常に ASO の予算不足を心配しています。長...

JVM と GC を理解するための 10 の質問

[[335561]]すべての Java 開発者は、日常業務や面接で JDK、JVM、GC の問題に遭...

Huawei EMUI10の詳細な分析:分散技術の機能、オープン性、ツールチェーン

8月10日、EMUI分散キーテクノロジー機能のオープン性とツールチェーンサブフォーラムが、約2,00...

Kafka のコアな知識をまとめた記事です。

[[421913]]基本的な紹介Apache Kafka は、LinkedIn が Scala と ...

モバイルゲームのトラフィックを購入するために使用されるチャネルは何ですか?この記事でわかります!

私は最近2週間かけて全国を旅行し、成都、上海、広州、深セン、厦門、北京の大量購入と流通の友人と多くの...