4つのTeslaカードを使用してGPUサーバーでジョブを実行するにはセロリを使用します。私は、各カードが常に1つの仕事を実行するように、4人の労働者のプールでセロリの労働者を実行します。CeleryでワーカーIDを取得する
私の問題は、各自が1つのGPUを要求するように作業者に指示する方法です。
device_id = os.getpid() % self.ndevices
しかし、私はこれは、常に動作することが保証されていないワーカープロセスが時間をかけて再起動します、すなわち:現在、私は、ワーカープロセスは、すべてが連続プロセスIDを持つべきであるという仮定に依存しています。理想的には、各労働者のIDを直接取得したいと思います。タスク内から作業者を検査することが可能か、GPUを介してジョブを配布する別のソリューションを提案できるかどうかを誰かに教えてください。
私は私の専門用語では不明だったと思う:私は実際には4つのプロセスを生成1つのワーカーを持っています。私が得ようとしているのは、UNIXのpidではなく、Celery内のプロセスID(0〜3)です。私は、1つのプロセスで複数のセロリ労働者を雇っているのではないかと思います。私がIDにアクセスできる場所は実際問題ではありません。タスクレベルで検査することも、プロセスごとにグローバル変数にすることもできます。 – oceanhug
合意しましたが、私のソリューションには満足していません...スーパーバイドで管理されている一部の作業者がいる実稼働環境であれば問題ありませんが、専用の設定が必要で、 --concurrency = xxx'引数です。 * current_app.poolはありますが、私はそれをどうするか説明できません... –
編集:全く新しい答えが見つかりました\ o/ –