web-dev-qa-db-ja.com

pythonコードを実行するのに最も効率的なAWSインスタンスはどれですか?

これがこの種の質問に適したスタックであることを願っています。

pythonを処理する必要がある大きなタスクに直面しています。自分のマシンで実行するには、約60時間かかります。このタスクは、gpuではなくcpuによって実行されます。

c5インスタンスはCPU負荷の高いタスク用に作成されているようなので、最初のインスタンスはc5.4xlarge Windowsインスタンスでした。インスタンスでpythonスクリプトを実行した後、その速度が遅いことに驚きました。ラップトップがタスクバッチごとにかかる時間とほぼ同じ時間でした。それを終了し、m5.4xlargeインスタンスを試してみました。同じ結果。

私は何が間違っているのですか?これらのインスタンスは、i7-8550UCPUを搭載したラップトップよりも10倍高速に実行されるはずです。

考慮すべきいくつかの側面があります。

  • アプリケーションでマルチCPUコアを使用できますか? EC2インスタンスが大きいほど、CPUコアは多くなりますが、通常、シングルコアのパフォーマンスは速くありません。アプリケーションが並列処理を実行して、使用可能なすべてのCPUコアを利用できることを確認してください。

    並列処理を実行できない場合は、データを複数に分割できるかどうかを確認してください独立したバッチアプリの複数のコピーを並列に実行し、それぞれが単一のコアを利用します。

  • どこにいますかデータを保存?それらがEBSボリューム上にある場合、インスタンスローカルストレージ(別名ephemeralストレージ)。すべてのEC2インスタンスがインスタンスストレージを提供するわけではありません。詳細については Amazon EC2 Instance Types テーブルを確認してください。データアクセスのパフォーマンスを向上させるために、処理する前にデータをインスタンスストレージにコピーするに報われる場合があります。

    もう1つのオプションは、ストレージ最適化インスタンスプロビジョニングされたIOPS EBSボリュームとともに使用することですが、通常は非常にコストがかかります。

  • アプリが計算中に多くのnetworkingを実行する場合は、その前でもスロットルが絞られていないことを確認してください。高いネットワークパフォーマンスのEC2インスタンスを選択します。

このような実験では、 スポットインスタンス を使用すると、ランニングコストを最大90%節約できる(または同じ価格で多くのことが得られる)と便利な場合があります。より大きなインスタンス)。ただし、いくつかのトレードオフに注意してください。主に、特定のインスタンスタイプの需要が増加した場合、インスタンスはいつでも終了する可能性があるという事実です。

それが役に立てば幸い:)

1
MLu

多くのファイルをディスクに読み書きしている場合、IO操作は通常ネットワーク接続に依存しているため(EBSを検索)、AWSでスクリプトが遅くなることはありません。

あなたはi3インスタンスタイプを試すことができます、彼らは速いSSDディスクを提供します。しかし、お金と時間を節約するより正確なアプローチは、あなたのケースのボトルネックが何であるかを調査することです:cpu、ramまたはioとそれを克服するためにスクリプトを調整します。

0
antrost