LoginSignup
11
10

More than 5 years have passed since last update.

PycharmでAWSのインタプリタを利用する

Last updated at Posted at 2017-05-04

やること

AWSのインスタンスのインタプリタを使って、ローカルのpycharmで開発!

背景

特定のモジュールをインストールするのが困難を極めるとき、既にインストールされているAWSのAMIやdockerコンテナなどを利用するのはとても楽です。
ただ僕はコーディングをpycharmなどのIDEでやりたいので、サーバーに入ってvimで開発するのは少し敷居が高い。。
pycharmで、サーバーへremoteでログインして、そのサーバーのインタプリタを使ってコーディングできる機能を発見したので試して、メモ書きをする。
※ professional版でしかできないので注意。

環境

  • Mac Book Pro OSX El Capitan (ver10.11.3)
  • Pycharm Professional
  • AWSのEC2インスタンス

方法

1 pycharmのインタプリタ設定でAdd Remoteを押す。

Pycharm Preferences→ Project: hoge→ Project Interpreterをクリックすると、以下の画面が現れる。この右上の歯車をクリックすると、
スクリーンショット 2017-05-04 16.22.06.png
以下のウィンドウが出るので、「Add Remote」を押す。
スクリーンショット 2017-05-04 16.37.16.png

2 SSH設定

Add Remoteを押すと、インタプリタのConfigureが現れるので、SSH Credentialsを押すと以下のような設定画面になる。
スクリーンショット 2017-05-04 16.22.29.png

ここでそれぞれ、以下を指定。

  • Host:54.xx.xx.xxなどのパブリックIPの指定
  • port:ssh接続時のポート番号を指定
  • user name:ec2-userなどのssh接続ユーザーの指定
  • Auth type:password or pemの、接続方法の指定
  • password:パスワードか、pemファイルの保存先を指定
  • Python interpreter path:インタプリタのパスを指定。
    ※ 基本/usr/bin/pythoinで良いと思いますが、分からなければ「which python」で普段利用しているpythonのパスを調べてセット。

これでOK。
あとたまに、AMIによってはec2-userなどの一般ユーザーではなく、rootユーザーで作業用環境が構築されている場合があるため、このときはsshd_configと公開鍵をいじってあげる。

# sshd_configの修正
vi /etc/ssh/sshd_config
# PermitRootLogin forced-commands-onlyを以下に。
PermitRootLogin without-password

# 公開鍵のコピー
mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys_bak
cp -f /home/ec2-user/.ssh/authorized_keys /root/.ssh/authorized_keys
service sshd reload

ここまで書いたが、この機能、結構めんどくさいことに気づいた。。
まず、ローカルのパスがリモート側に存在しないと実行できない。
おそらくこの機能は、ローカルで書いたものをリモートにそっくりそのまま上げて利用するのが正しい?
続いて、何故かインポートできないモジュールが存在する。
caffeを使っているのだけど、import caffeでそんなのないって言われる。
anaconda配下にpycaffeがないので、anaconda配下に移してあげないといけないかも。

んーー、 importエラーが出ないローカルIDEでソースを作って、それを上げるのには使える??かな。。
デバッグできないのがかなり悲しいけども。。。
上の問題は、余力があれば調査してみます。

追記

ローカルとリモートのパスの対応付けと、オートアップロード機能に気付いたので追記。

ローカルとリモートの対応付けの方法

1 上のタブの”RUN"から"Edit Configration.."をクリックする。
2 Path Mappingの右側をクリックする。
3 localパスとRemote pathをセットする。
以上。

オートアップロードの方法

対応付けしても、作業はあくまでローカルなので、AWSに一々ローカルで変更したソースを上げないとダメ。
これを、ローカルのpycharmで修正したソースを、自動でAWSに上げる方法。
1 Preferences->Deploymentで、+ボタンを押す。
2 SFTPを選択して、グローバルIP Root path="/" keypair指定 でOK。Browse files on serverはそのままで大丈夫。
3 Preferences->Deployment->Optionsで、Upload changed files automatically...をAlwaysにかえて、Override default permissions on files:を任意の権限に指定。
以上。

これで、ローカルでpycharmでコーディングして、それがAWS上で即時反映されて開発できる。
デバッグもできる。素晴らしい。

cudaを利用する場合

cudaのlib系に対するパスがなくてエラーになる場合がある。
その際は、RunのConfigurationsで、Environment Variableに以下をセット。

LD_LIBRARY_PATH /usr/local/cuda/lib64:$LD_LIBRARY_PATH

リモートインタプリタを利用中、デバックで「: cannot connect to X server」が出てエラーになる場合

正確に把握はしていないが、サーバー上でXcodeが使えない場合にエラーになるっぽい。
そこで、ローカルのXcodeで補完するための作業が必要。

1. ローカルから、以下で接続。

ssh -Y username@ipaddress

2. 1の接続で、以下のコマンドで、DISPLAYの内容を確認。

echo $DISPLAY
> localhost:10.0

3. pycharmのEnvironment Variableに2の内容をセット。

DISPLAY localhost:10.0

4. 1の接続をしたまま、pycharmでデバッグ実行。
でOK。

AWSなどのクラウド上のtensorboardなどを確認したいがポートが解放されていない場合

ローカルから、以下で接続をしておいて、サーバー上で、利用ポートを9999指定し、ローカルのブラウザにlocalhost:8888で接続をしに行くと、そのアクセスが9999へポートフォワードされて表示ができる。

ssh -L 8888:localhost:9999 user@pablic_ip
11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10