私たちの研究部門には、CPUとGPUを使用して重い作業を行う強力なUbuntuシステムがあります。私たちの研究者はすべてSSHを介して機械に接続し、システム上で(機械学習)ワークロードを実行します。
問題は、システムを使用している人と同時に競合が発生しており、人々がディープスを呼び出すことができる単純なチャットボックスでは十分ではないということです。基本的に、研究者Aが時間に敏感なベンチマークのためにGPUを使用したい場合は、他の人が他の人がGPUに触れることを望んでいません。
ユーザーに特定のコマンドまたはデバイスへの排他アクセスをスケジュールして付与するためのツールがあるかどうか疑問に思います。すべてのタスクは、カスタムグループを介してアクセスできる集中型のConda(Python)インストールを介して実行されます。誰もがシステムにSSHで接続します。 SSHアクセスをブロックしたり、GPUを排他的に設定したり、Pythonアクセスをブロックしたりできますか?
編集:私たちの研究グループにはアクティブなユーザーベースがありますが、キューシステムで設定を複雑にしたくないことを先に指摘する必要があります。私たちの設定にあまり邪魔になる(より素朴な)変更をすることが私たちの最初の選択です。この問題に早く言及することができず、申し訳ありません。
答え1
これを処理する一般的な方法は、キューシステムを使用し、ユーザーがキューを介してのみジョブを送信できるようにすることです。私が働いた研究所でよく見られるのはトルク:
TORQUE は、バッチジョブと分散コンピューティングノードの制御を提供するリソースマネージャです。デフォルトでは、このソフトウェアを使用して、家庭や小規模オフィスのLinuxクラスターとキュージョブを設定できます。クラスタは、ヘッドノードと複数のコンピューティングノードで構成されます。ヘッドノードは Torque サーバーデーモンを実行し、コンピューティングノードは Torque クライアントデーモンを実行します。ヘッドノードはスケジューラデーモンも実行します。
他にもいくつかあります。すべての人がマシンを効率的に使用できるように適切なキューシステムを設定する方法については、システム管理者に連絡してください。これは共有クラスタにアクセスするための標準設定です。
答え2
これについての私の考え:
- 同時SSHアクセスを無効にするのは正しくないようです。私の経験によると、人々はSSH接続を開き、アプリケーションを実行せずに実行するのが好きです。繰り返しログインすると、多くの人に不快感を与える可能性があります。
- 同時Pythonアクセスを無効にするのは正しくないようです。 CPU/GPU リソースにアクセスせずにジョブを実行している可能性があります。
私が処理する方法は次のとおりです。
- CPU/GPU負荷を監視する方法が必要です。
- 毎秒これらの値を確認するタスク(ルートで実行)を作成し、その値が十分に高い場合はデフォルトで行います
chmod 600/700 files_required_to_access_CPU_GPU
。負荷が低いかゼロになるとchmod 644/755 the_same_files
。
私はあなたのためにこのプログラムを書くことができますが、システムへのアクセスが必要です。特に複雑なものは見えません。
答え3
/etc/nologinファイルを作成して、新しいログイン(ルートを除く)を防ぐことができます。これにはroot権限が必要です。ただし、ユーザーがシステムを使用した後は、常にこのファイルを削除するように注意してください。これは、ファイルを生成し、いくつかのシグナルまたはシャットダウンを待ってから、ファイルを削除するいくつかの特権プロセスが必要であることを意味します。 sudoの使用は、プロセスが別々の特権コンテキストで実行され、権限のない信号をプロセスに送信できないため、少し複雑です。ただし、パイプを介してユーザーは特権プロセスに通信できます。
Bashシェルスクリプトを考えてみましょう:_mkexclude
#!/bin/bash
MSG="$1 has exclusive access"
XFILE="/etc/nologin"
[ -e "$XFILE" ] && echo "Exclusivity already established, FAIL" >&2 && exit 3
# make exclusive
echo ${MSG} > $XFILE
trap '/bin/rm -rf $XFILE; exit' USR1 QUIT HUP EXIT TERM
# wait to read any line before continuing from stdin cleanup
read f
# make non-exclusive
/bin/rm -rf $XFILE
そのユーザーに対してNOPASSWDコマンドを使用して、/etc/sudoers.dでスクリプトを構成する必要があります。 (またはグループ)。このスクリプトは、nologin ファイルがすでに存在することを確認します。そうでない場合、新しい項目が生成されます。その後、読み取りまたは信号を待ちます。元の(bash)シェルが終了すると、clusiveも終了します。
このスクリプトを呼び出す良い方法は、bashシェル関数を使用することです。
exclude() { coproc EXCLUDE (sudo _mkexclusive $(id -un) ); }
disexclude() { echo FOO >&${EXCLUDE[1]} ; }
[~/.bashrcのユーザーに提供]
スクリプトのsudoを許可されているすべてのユーザーは、$ just関数を実行して追加のログインを防ぐことができます。これらのユーザーは、**disexclude**
同じシェル実行コンテキスト内でのみ他のユーザーがログインできるようにすることができます。
もしユーザーが除外を生成したシェルを閉じるかログアウトする場合、coprocは他の人のログインを防ぐ$XFILEを削除する必要があります。