使い方
HOW TO USE

SSHセッションが切れてもバックグラウンドで処理を継続する方法 | GPUSOROBAN

2022.04.28

本記事では、GPUSOROBANのインスタンスに接続する際に、SSHセッションが切れた状態でもバックグラウンド処理を継続する方法を紹介します。

GPUSOROBANは高性能なGPUインスタンスが低コストで使えるクラウドサービスです。
サービスについて詳しく知りたい方は、GPUSOROBANの公式サイトを御覧ください。

長時間プログラムを実行した際に、途中でSSH接続が切断され処理が途中で終了してしまう場合があります。
そのような場合には「screen」コマンドを使用することで、SSH接続が切断された場合でもバッググラウンドでプログラムの処理が継続します。 
今回は、screenコマンドを利用してバッググラウンドで処理を実行する手順を確認します。

アクセスサーバに接続

ターミナル上で以下のコマンドを入力してアクセスサーバに接続します。

ssh -L 20122:<インスタンスIPアドレス>:22 -l user as-highreso.com -p 30022 -i .ssh/ackey.txt


インスタンスへの接続

続いてインスタンスへの接続を行います。新規ターミナルを開き、下記コマンドにてインスタンスに接続してください。

ssh user@localhost -p 20022 -i .ssh\mykey.txt


screenのインストール

apt updateを実行し、パッケージ情報を更新します。

sudo apt -y update

続いてscreenのインストールを実行してください。

sudo apt -y install screen


仮想端末の起動

まずは仮想端末の一覧を確認します。
次のコマンドを実行すると "No Sockets found in /run/screen/S-user." が返され、この時点では仮想端末がまだ作られていないことが示されます。

screen -ls

下記コマンドを実行して「sc1」という名前の仮想端末を作成します。下図のように、まっさらな画面が表示されたら成功です。

screen -S sc1

続いて「Ctrl」+「a」キー を入力した後に、「d」キーを入力し、仮想端末の画面を抜けてください(デタッチ)。

次のコマンドを実行すると、sc1がデタッチされ、また仮想端末の起動が継続していることを確認できます。

screen -ls

ここまでがscreenコマンドの基本的な操作の確認になります。

続いて、この仮想端末「sc1」の中でサンプルプログラムを動作させてみます。


バックグラウンド実行

まずは実際に動かすプログラムの準備をします。今回の事例ではMNISTの画像認識プログラムを使用します。

プログラムを実行する前にPytorchのインストールが必要です。
Pytorchのインストール方法については、Pytorchのインストール(Ubuntu)の手順書をご覧ください。

次に下記のコマンドを実行して、gitのインストールおよびプログラムコードを取得します。

sudo apt -y install git
git clone https://github.com/highreso/Lrning_DeepLearning_in3days.git

続いて先ほど作成した仮想端末sc1にログイン(アタッチ)します。

screen -r sc1

アタッチ後、下記コマンドを実行してプログラムを実行します。

cd Lrning_DeepLearning_in3days
python train.py


このまま放置するとプログラムが進行しますが、今回は仮想端末上のプログラムがバックグラウンドで動作し続けることを確認するために一度インスタンスとの接続を切断してみます。

先ほどと同様に「Ctrl」+「a」キー を入力した後に、「d」キーを入力し、仮想端末からデタッチします。
続いて、exitコマンドを実行し、インスタンスから切断します。


インスタンスからから切断した後、同一のターミナル上で下記コマンドを実行してインスタンスに接続し直します。

ssh user@localhost -p 20022 -i .ssh\mykey.txt


再度sc1にアタッチすると、プログラムが継続して動いていることが確認できます。
インスタンスとのSSH接続セッションの切断が合った場合でも、継続してプログラムの実行が可能です。

screen -r sc1


プログラムの動作完了後に仮想端末をシャットダウンする場合は、「Ctrl」+ 「d」キーにてシャットダウン可能です。

ここまでがScreenコマンドを使用したバックグラウンド処理の説明になります。

本環境には、GPUSOROBANのインスタンスを使用しました。
GPUSOROBANは高性能なGPUインスタンスが低コストで使えるクラウドサービスです。
サービスについて詳しく知りたい方は、GPUSOROBANの公式サイトを御覧ください。