Talendが業界初のクラウドネイティブかつApache Beam採用のデータストリーミング用クラウドアプリを提供

… Data Streams」をオンラインストア「AWS Marketplace」で提供することを発表しました。Talend Data Streamsは、大量で多様なリアルタイムデータの取り込みを簡素化・高速化し、かつデータエンジニア、データサイエンティスト、データアナリスト、そしてその他のデータを必要とするユーザーに対して、統制されたセルフサービス … 続きを読む

Aws administration guide

The CloudLink documentation is available on the CloudLink page in the AWS Marketplace. Deliver the stability and scalability needed by a business on AWS. ンします。ログイン情報は認証ゲートウェイに送信され、認証ゲートウェイはトラフィックを WorkSpace. com: Amazon WorkSpaces Administration Guide … 続きを読む

AWS wordpress installation & Cpanel

さらに表示: aws cpanel cost, how i built a cpanel hosting environment on amazon aws, install cpanel on aws ubuntu, cpanel license for ec2, aws marketplace cpanel, cpanel aws lightsail, aws cpanel license, aws cpanel free, wordpress installation customization fee, wordpress adding page backend, … 続きを読む

AWS WAF マネージドルールの新製品

AWS WAF マネージドルールの新製品. 本日、F5 ネットワークから新しい 3 つの AWS WAF マネージドルールを発表します。この開始に伴って、AW… 続きを表示 本日、F5 ネットワークから新しい 3 つの AWS WAF マネージドルールを発表します。この開始に伴って、AWS Marketplace 経由または AWS WAF Console 内から … 続きを読む

ベリタス、マルチクラウド環境に対応したスナップショットベースのデータ保護製品「CloudPoint 2.0」

なお、バックアップソフトウェア「Veritas NetBackup」の既存ユーザーは、CloudPoint 2.0と統合して、データセンターでのNetBackupのスナップショット管理機能を拡張できるとした。 対応クラウド環境はAmazon Web Services(AWS)、Microsoft Azure、Google Cloudなど。Microsoft Azureについては、Azure Marketplace … 続きを読む

BIG-IP ve for AWSで遊ぼう

はじめに

AWS上にBIG-IP veをデプロイしてみます。

トライアルライセンスの入手

ライセンスの入手はこちらから。90日のDownload a free trialを選びましょう。アカウントが無い人はRegister for your trialから、既に持っている人はLog inから。キーは30分以内に発行されます。

構成の検討

キーが発行されるまでの間にアドレス設計をしておきます。将来2台のBIG-IPを冗長構成で使うことも考え、以下の4つのサブネットを用意しました。

サブネット名 CIDR 用途
Public 10.0.1.0/24 WAN側インターフェース
Private 10.0.2.0/24 LAN側インターフェース
HA 10.0.3.0/24 HA用インターフェース
Management 10.0.4.0/24 Management用インターフェース

インスタンスの作成

EC2のインスタンス画面から、Launce Instanceでインスタンスの作成を行います。

AMIの選択

左側のメニューから「AWS Marketplace」を選び、「big-ip」で検索します。

image.png

何やらたくさん出てきますが、トライアルライセンスを使いたいので選ぶのは「BYOL (Bring Your Own License)」のものです。BYOLにもGood/Better/Bestの3種類があります。これは機能の差で、GoodはLTMのみ、Betterはそれに加えてDNSとAFM、BestはASMとAPMも含めた全ての機能が使えるようになります。しばらくはLTM部分の検証のみに使う予定なので、今回は「Good」を選びました。

image.png

インスタンスタイプの選択

とにかく安く作りたかったので、選択肢の中で一番安いt2.mediumを選択しました。

インスタンス詳細

NICの設定は要注意です。最初に作成したNICがBIG-IP上でManagement用のものになるため、Managementセグメントを指定します。IPは10.0.4.11にしました。接続用にIPv4 Public IPもつけておきます。
ストレージはデフォルトのままです。

セキュリティグループ

初期設定でtcp/8443への接続が必要になります。「Create a new security group」を選ぶと自動的にルールを作ってくれるので、これを使いましょう。

待つ

インスタンスの起動を待ちます。。。

接続

インスタンスが起動したら、AWSの秘密鍵を使ってadminユーザでSSHアクセスをします。tmosシェルが出てくるので、modifyコマンドでadminユーザのパスワードを変更します。

BIG-IP
admin@(ip-10-0-4-11)(cfg-sync Standalone)(NO LICENSE)(/Common)(tmos)# modify auth user admin password <password>

変更できたら次はブラウザから、https://:8443にアクセスしてGUIで操作をします。adminユーザ、先ほど変更したパスワードでログインができますので、ライセンスを投入していきます。

ライセンス投入

image.png

ログインするとライセンスが無いと表示されていますので、「Activate」を選択。

image.png

f5から送られてきているトライアルキーを入力して「Next…」を選択。ソフトウェア利用許諾を読んで「Accept」をします。

image.png

少し待つとライセンス認証が完了し、無事3ヶ月のトライアルができるBIG-IP veが誕生しました!

終わりに

BIG-IPは高価なのでなかなかラボ環境を揃えるのが難しいので、トライアルライセンスで勉強ができるのは嬉しいですね。次回は2台目のデプロイと冗長構成、その後はiruleなども試していきたいところです。

続きを読む

AWS Batchで固定されたEC2インスタンスのGPUを使う

背景

AWS Batchでは、Jobの定義とAMIの指定を行うことで、
1. 自動でEC2インスタンスを立ち上げ
2. Dockerコンテナを起動
3. コンテナ終了時にEC2インスタンスの自動削除
を行ってくれます。

しかし、EC2インスタンスの料金体系では、毎回インスタンスを立ち上げ・削除するのはコスパが悪いため、Jobが実行されるEC2インスタンスを固定して、実行中以外は削除ではなく、「停止」にしたい!

ということで、その手順をまとめました。
AWS Batch、あるいはAmazon ECS(Elastic Container Service)でGPUを使うための設定も含まれていますので、インスタンスの固定はいいや、という方にも参考になれば、と思います。

AWS Batchの設定

Compute environments(=ECS Cluster)

AWS Batch > Compute environments > Create environment から、AWS BatchのJobを実行する計算環境を作成します。この計算環境は、ECSのClusterとして保存されます。(ECS Clusterが自動で生成され、Compute environmentsに紐付けされます。)

  • Managed:
    AMIを指定しておくことで、Jobの実行時にそのAMIで新たにEC2インスタンスを立ち上げてくれます。
  • Unmanaged:
    Compute environmentsに紐付いたECS Clusterを生成します。EC2インスタンスは、自分でそのClusterに登録する必要があります。

作成されたClusterをECSコンソールから確認しましょう。後ほど使います。
<EnvironmentName>_Batch_<ランダムっぽい文字列> のような名前担っているはずです。

Job Queue

Job Queueは、上記で作成したEnvironmentを選択してください。

Job Definition

Volumes

Name Source path
nvidia /var/lib/nvidia-docker/volumes/nvidia_driver/latest

Mount points

Container path Source volume Read only
/usr/local/nvidia nvidia false

ECSで使える(Dockerが動かせる)EC2インスタンスを用意する

ECS用に最適化されたAMIはAWSから提供されていますが、GPUが載ったものでECS用に最適化されたAMIは提供されていません。

用いるAMIを決める

AWS Batchのドキュメント GPU ワークロードの AMI の作成 にある例では Deep Learning AMI with Source Code (CUDA 9, Amazon Linux) を使用していますが、今回は Deep Learning Base AMI (Amazon Linux) を使用することにしました。
(AWS Batchを用いる = Dockerを用いるので、Hostマシンに機械学習ライブラリは不要。 & Cuda, CuDNNのバージョンが複数あるので、動かすDockerImageが変わった時に助かりそう。)
ここは、必要に応じてaws marketplaceでいろいろ探してみるとよいかと思います。

インスタンスを起動する

IAM

インスタンスからECSに向けたIAM Roleが必要です。Roleの設定がない場合は、EC2コンソールから設定をしましょう。

UserData

UserData
#!/bin/bash
echo "ECS_CLUSTER=<ClusterName>" >> /etc/ecs/ecs.config

Dockerが使えるようにする

上記のAMIのままでは、Dockerが使えないので、ドキュメントを参考に、ECSで使える状態のインスタンスを作成していきます。

configure-gpu.sh
#!/bin/bash
# Install ecs-init, start docker, and install nvidia-docker
sudo yum install -y ecs-init
sudo service docker start
wget https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm
sudo rpm -ivh --nodeps nvidia-docker-1.0.1-1.x86_64.rpm

# Validate installation
rpm -ql nvidia-docker
rm nvidia-docker-1.0.1-1.x86_64.rpm

# Make sure the NVIDIA kernel modules and driver files are bootstraped
# Otherwise running a GPU job inside a container will fail with "cuda: unknown exception"
echo '#!/bin/bash' | sudo tee /var/lib/cloud/scripts/per-boot/00_nvidia-modprobe > /dev/null
echo 'nvidia-modprobe -u -c=0' | sudo tee --append /var/lib/cloud/scripts/per-boot/00_nvidia-modprobe > /dev/null
sudo chmod +x /var/lib/cloud/scripts/per-boot/00_nvidia-modprobe
sudo /var/lib/cloud/scripts/per-boot/00_nvidia-modprobe

# Start the nvidia-docker-plugin and run a container with 
# nvidia-docker (retry up to 4 times if it fails initially)
sudo -b nohup nvidia-docker-plugin > /tmp/nvidia-docker.log
sudo docker pull nvidia/cuda:9.0-cudnn7-devel
COMMAND="sudo nvidia-docker run nvidia/cuda:9.0-cudnn7-devel nvidia-smi"
for i in {1..5}; do $COMMAND && break || sleep 15; done

# Create symlink to latest nvidia-driver version
nvidia_base=/var/lib/nvidia-docker/volumes/nvidia_driver
sudo ln -s $nvidia_base/$(ls $nvidia_base | sort -n  | tail -1) $nvidia_base/latest

スクリプトの実行(Step 4.)

bash ./configure-gpu.sh

これで環境は完成していますが、念のため動作確認(Step 5. )

sudo docker run –privileged -v /var/lib/nvidia-docker/volumes/nvidia_driver/latest:/usr/local/nvidia nvidia/cuda:9.0-cudnn7-devel nvidia-smi

DockerからGPUが使えることを確認できたら(以下のような $ nvidia-smi の結果が見られれば) OKです。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.81                 Driver Version: 384.81                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla V100-SXM2...  Off  | 00000000:00:17.0 Off |                    0 |
| N/A   43C    P0    42W / 300W |     10MiB / 16152MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

ECS Clusterにインスタンスを登録する

Check 1
インスタンスからECSに向けたIAM Roleが必要です。Roleの設定がない場合は、EC2コンソールから設定をしましょう。

Check 2
Clusterにインスタンスを登録するには、インスタンス側での設定が必要です。インスタンス起動時のユーザデータで下記ファイルがきちんと作られていることを確認。できていなければ作りましょう。

/etc/ecs/ecs.config
ECS_CLUSTER=<ClusterName>

ドキュメント のStep 6., 7.的なことをしてあげると、Clusterにインスタンスが登録されます。(しばらく時間がかかります)

sudo docker rm $(sudo docker ps -aq)

sudo docker rmi $(sudo docker images -q)

sudo restart ecs

Submit Job

お好きなフックでどうぞ

EC2インスタンスを停止する

Managedであれば自動でインスタンスを削除してくれますが、Unmanagedの場合、インスタンスの停止も自分で行わなければなりません。
今回は、Jobの成功、失敗にかかわらず停止したいので、以下のpythonスクリプトを自作し、AWS Lambda x CloudWatchEventsで走らせることにしました。

  • [‘SUBMITTED’, ‘PENDING’, ‘RUNNABLE’, ‘STARTING’, ‘RUNNING’] のいずれかの状態のJobがあればそのまま。
  • いずれの状態のJobもなければ、停止。
import os
import boto3

JOB_NAME = os.environ['JOB_NAME']
JOB_QUEUE = os.environ['JOB_QUEUE']
INSTANCE_ID = os.environ['INSTANCE_ID']


def is_running():
    batch = boto3.client('batch')

    check_status = ['SUBMITTED', 'PENDING', 'RUNNABLE', 'STARTING', 'RUNNING']
    for s in check_status:
        list = batch.list_jobs(
            jobQueue=JOB_QUEUE,
            jobStatus=s
        )['jobSummaryList']
        if list:
            print(f"{[j['jobId'] for j in list]} are still {s}.")
            return True
    else:
        return False


def ec2_stop():
    ec2 = boto3.client('ec2')

    response = ec2.describe_instances(
        InstanceIds=[INSTANCE_ID]
    )
    if response['Reservations'] and response['Reservations'][0]['Instances']:
        state = response['Reservations'][0]['Instances'][0]['State']['Name']

        if state in {'pending', 'running'}:
            print(f"Start to stop the instance: {INSTANCE_ID}")
            response = ec2.stop_instances(
                InstanceIds=[INSTANCE_ID]
            )
        else:
            print(f"The instance {INSTANCE_ID} is not running.")
    else:
        raise ValueError(f'No Such Instances: [{INSTANCE_ID}]')

def lambda_handler(event, context):
    if not is_running():
        ec2_stop()

最後に

こんなことするくらいなら、最初からBatchじゃなくて、ECSにしとけばよかったんちゃうか、と思いながら。
ただ新しいものに触れて、上記以外の学びも得たので、それはまた別の時に。

続きを読む

GPUでChainerを動かすならDeep Learning Base AMI(Ubuntu)を使用するのが楽。

はじめに

私が自分のPCでGPU Learningしようとしてセットアップで四苦八苦していた際に、AWSからDeep Learning Base AMIなるものが昨年11月に出ていたと知り、試した所非常に簡単に学習まで行うことが出来たのでそのやり方についてまとめました。

AWS Deep Learning Conda と Base AMI の利用開始について

Deep Learning Base AMI

Deep Learning Base AMIはセットアップやパスの設定がめんどい、NVIDIA driver, CUDA, CuDNN, Python, etc…が最初から入ってるAMIです。

UbuntuかLinux版があり、主要フレームワーク(MXNet, TensorFlow, Caffe2, PyTorch, Theano, CNTK, Keras)がプリインストールされてるAMIもあります。
image.png

AWS Marketplace: Deep Learning Base AMI (Ubuntu)

料金

  • EC2インスタンス稼働時の料金 + EBSの料金
  • p2.xlargeが$0.900/hr(us-east)で、平均1日3時間程起動 + EBSの料金で1ヶ月3000円程でした。(300円/1dayくらい)
  • 自分の場合はEIPを使用せず、こまめに停止させてたので参考までに。

どうしてUbuntu?

環境構築

今回作成するインスタンスの設定は以下です。

設定項目
リージョン us-east(バージニア北部)
AMI Deep Learning Base AMI (Ubuntu) – ami-10ef8d6a
インスタンスタイプ p2.xlarge

EC2インスタンスの作成

制限緩和リクエストを送る

おそらくデフォルトだと、p2, p3インスタンスの作成制限が「0」となっており、作成できません。
そのため作成するには、(https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#Limits:) から制限緩和リクエストを送る必要があります。
制限緩和リクエストについては日本語大丈夫ですが、承認まで1~2日ほどかかりました。
image.png

EC2インスタンスを新規作成。

EC2のマネジメントコンソール画面(https://console.aws.amazon.com/ec2/) からインスタンスの作成を選択。

使用するAMIを選択。

image.png

インスタンスタイプを選択。

とりあえずGPU Learningがしたかったため、最も安いp2.xlargeを選択。
image.png

機械学習用途だと、p2かp3になりますが、p3の方が優れていてお高いです。
Amazon EC2 P2 インスタンス| AWS

P2 インスタンスでは、最大で 16 個の NVIDIA K80 GPU、64 個の vCPU、および 732 GiB のホストメモリを、192 GB の GPU メモリ、4 万件の並列処理コア、70 テラフロップの単精度浮動小数点数演算、および 23 テラフロップスを超える倍精度浮動小数点数演算と組み合わせて利用できます。

Amazon EC2 P3 (英語ページだったのでGoogle翻訳を載せます。)

最大8つのNVIDIA Tesla V100 GPUを搭載したP3インスタンスは、1ペタフロップの混在精度、125テラフロップの単精度、および62テラフロップの倍精度浮動小数点性能を提供します。P3インスタンスには、カスタムIntel Xeon E5(Broadwell)プロセッサーと488 GB DRAMをベースにして、最大64のvCPUが搭載されています。

他の設定はそのままで特に問題ないです。
キーペアの作成も行えば無事インスタンスが立ち上がるはずです。

接続

$ ssh -i /path/my-key-pair.pem user_name@public_ip

user_nameはLinuxだとec2-user、Ubuntuだとubuntuです。
public_ipはインスタンス画面下部の説明タブにある「IPv4 パブリック IP」です。
Are you sure you want to continue connecting (yes/no)?のようなメッセージがでたらyesで良いです。

CUDA関連のパスも既に設定済み!!

GPU学習環境を構築するには、PATHLD_LIBRARY_PATHCUDA_PATHやら設定する必要がありますが、すでにされているためこちらから弄る必要はありません。

デフォルトではCUDA 9環境のため、もしCUDA 8に切り替えたい場合はLD_LIBRARY_PATHを修正して下さい。
AWS Deep Learning Conda と Base AMI の利用開始について | Amazon Web Services ブログ – 新しい Deep Leaning Base AMI の設定

環境変数 LD_LIBRARY_PATH を再設定することで CUDA 8 環境に切り替えることも可能です。環境変数の文字列の CUDA 9 の箇所を CUDA 8 に相当するものに置換するだけです。

Chainer + Cupyのインストール

名前 バージョン
Python 2.7.12 or 3.5.2
Chainer 3.2.0
Cupy 2.2.0

コマンドは使いたいPythonのバージョンで適宜読み替えて下さい。
Python2系の場合はpython, pip、Python3系の場合はpython3, pip3になります。

ubuntu@ip-xx:$ sudo pip3 install chainer

Chainer v3からかインストールと一緒にcupyが入らなくなってます。なのでこちらからcupyをインストールしてあげます。(数分かかります)

ubuntu@ip-xx:$ sudo pip3 install cupy

MINSTサンプルで確認

GPU Learningが出来るかMINSTサンプルで確認して下さい。

ubuntu@ip-xx:$ wget https://raw.githubusercontent.com/chainer/chainer/v3/examples/mnist/train_mnist.py

このまま実行すると、ImportError: No module named '_tkinter', please install the python3-tk packageとなるので必要なmoduleをいれます。

ubuntu@ip-xx:$ sudo apt-get install python3-tk

matplotlib関係の設定が必要なため設定します。

ubuntu@ip-xx:$ vi .config/matplotlib/matplotlibrc
.config/matplotlib/matplotlibrc
backend      : Agg

$DISPLAYが未定義でmatplotlibがコケる問題を再発させない方法

これで実行してエラーなく動作すれば大丈夫です。

ubuntu@ip-xx:$ python3 train_mnist.py -g 0

うまくいかない場合はコメント等で指摘して頂けると助かります🙇

続きを読む