Chapter11 DynamoDB ハンズオン

11-2-1 デプロイ

デプロイを行っていく
今回は handson/serverless/dynamodb にディレクトリに移動してデプロイを行っていく

# プロジェクトのディレクトリに移動
$ cd handson/serverless/dynamodb

# venvを作成し、依存ライブラリのインストールを行う
$ python3 -m venv .env
$ source .env/bin/activate
$ pip install -r requirements.txt

# デプロイを実行
$ cdk deploy

デプロイに成功すると

このような画面になります
画像の SimpleLambda.FunctionName=から右側の数字を使うのでメモしときましょう

AWSコンソールのDynamoDBのページに行くとテーブルに1つ追加されています

11-2-2 データの読み書き

以下のコマンドでDynamoDBに要素を書き込んでいきます

$ python simple_write.py <SimpleDynamoDb.TableName>

実行したら

AWSコンソールに

上のアイテムが追加されました

先程書き込んだデータを以下のコマンドで読み込んでみます

$ python simple_read.py <SimpleDynamoDb.TableName>

実行したら

上の画像から書き込んだ要素を出力できてるということが確認できます

11-2-3 大量のデータの読み書き

今度は1度に1000個のデータを書き込んでみます
以下のコマンドで1000個同時に書き込んでいきます

$ python batch_rw.py <SimpleDynamoDb.TableName> write 1000

実行したら


このような画面になり、正常にかきこむことができました

そして次のコマンドを実行することで書き込んだデータの要素を絞って出力することができます

$ python batch_rw.py <SimpleDynamoDb.TableName> search_under_age 2

実行したら


このように出力されました

11-2-4 スタックの削除

最後に使い終わった用がなくなったスタックを削除していきます
スタックの削除は以下のコマンドで行うことができます

$ cdk destroy

 

 

 

 

 

Chapter11 Lambda ハンズオン

11-1-1 デプロイ

いつも通りディレクトに移動してデプロイを実行する
今回は handson/serverless/lambda にディレクトリに移動してデプロイを行っていく

# プロジェクトのディレクトリに移動
$ cd handson/serverless/lambda

# venvを作成し、依存ライブラリのインストールを行う
$python3 -m venv .env
$source .env/bin/activate
$pip install -r requirements.txt

# デプロイを実行
$ cdk deploy

デプロイに成功すると


このような画面になります
画像の SimpleLambda.FunctionName=から右側の数字を使うのでメモしときましょう

 

AWSコンソールのLambdaのページに行くと関数が追加されていることが確認できます


11-1-2 Lambda 関数の実行

Lambda 関数の実行してみましょう

# python invoke_one.py <SimpleLambda.FunctionName>

実行したら

このような結果になりました

Lambdaは複数のタスクを同時に処理することが可能です

 

なので今度は100個のタスクを実行してみます

$ python invoke_many.py <SimpleLambda.FunctionName> 100

実行をしたら、AWSコンソールのLambdaのページに行くとこのような画面になりました

上の画像から100個のタスクを同時に処理していることを確認することができます

11-1-3 スタックの削除

最後に使い終わった用がなくなったスタックを削除していきます
スタックの削除は以下のコマンドで行うことができます

$ cdk destroy

Chapter7

Chapter7-3 Transformerを用いたquestion-answeringプログラム

DockerとECSを駆使した機械学習アプリケーションを実装して実行しよう

なお今回は学習済みのモデルを用いるので以下のコマンドでDocker imageをローカルにダウンロードしよう

$ docker pull tomomano/qabot:latest

ダウンロードしたら
文章と質問の2つを入力していきます

$ context="Albert Einstein (14 March 1879 - 18 April 1955) was a German-born theoretical physicist
who developed the theory of relativity, one of the two pillars of modern physics (alongside quantum mechanics).
His work is also known for its influence on the philosophy of science. He is best known to the general public for his mass-energy
equivalence formula E = mc2, which has been dubbed the world's most famous equation.
He received the 1921 Nobel Prize in Physics for his services to theoretical physics, and especially for his discovery of the law of the photoelectric
effect, a pivotal step in the development of quantum theory."
$ question="In what year did Einstein win the Nobel prize ?"

入力したら次のコマンドでコンテナを実行します

$ docker run tomomano/qabot "${context}" "${question}" foo --no_save

実行結果は

”score”は正解の自信度を表す数字で[0~1]の範囲で表示される
"start"と”end”は、context中の何文字目が正解に相当うするかを示しており
"answer"が正解と予想された文字列

つまり画像から読み取るに、正解の自信は限りなく高く、answerも1921とちゃんと正解を当てている

 

今度はもう少し難しい質問を投げてみる
新しい質問を入力して

$ question="Why did Einstein win the Nobel prize ?"

実行

$ docker run tomomano/qabot "${context}" "${question}" foo --no_save

で実行

自信度は0.5784725546836853
先ほどと比べて自信度が下がりましたがanswerを見てみると正解しています

7-5 スタックのデプロイ

以下のコマンドを順番に実行してスタックをデプロイしていこう

# プロジェクトのディレクトリに移動
$ cd handson/qa-bot

# venvを作成し、依存ライブラリのインストールを行う
$python3 -m venv .env
$source .env/bin/activate
$pip install -r requirements.txt

# デプロイを実行
$ cdk deploy

デプロイできるとAWSのECSコンソール上でクラスター定義された

7-6 タスクの実行

先程デプロイで作成したクラスターに、次のコマンドで質問を投入することができる

$ python run_task.py ask "A giant peach was flowing in the river. She picked it up and brought it home. Later, a healthy baby was born from the peach. She named the baby Momotaro." "What is the name of the baby?"

これを実行したら結果、出力結果は「Answer:Momotaro」と出て正しい答えが出力された

7-7 タスクの同時実行

$ python run_task.py ask_many

このコマンドを実行したあとにECSコンソールに行き、タスクの一覧を見てみたら合計9個のインスタンスが起動された

そして

$ python run_task.py list_answers

実行

そうしたら

合計9個分の質問の答えが出た

7-8 スタックの削除

最後に使い終わったスタックを以下のコマンドで削除

$ cdk destroy

Chapter6

6-4 Docker チュートリアル

6-4-2 imageをダウンロード

パッケージ化された、Dockerの仮想環境(image)はDocker Hubからダウンロードできる

ためしに「Ubuntu」のimageを「pull」コマンドでローカルにダウンロードする

$ docker pull ubuntu:18.04

*このコマンドを実行するときはDockerイメージに入らず最初のコマンドラインで実行しよう

6-4-3 imageを起動

PullしてきたImageを起動するには、「run」コマンドを使う

$ docker run -it ubuntu:18.04

そしたら左の緑の文字部分が変化する

次にubuntuには初期からpytorchがインストール済みなのがある。これを起動してみよう。もしなくてもダウンロードが始めるので問題なし。

これをするまえにまず起動しているimageから一番最初のコマンドラインに戻らないといけない

戻るときは

$ exit

で最初のコマンドラインに戻れる


で次の

$ docker run -it pytorch/pytorch

を実行する。
筆者の場合ubuntu内にpytorchがなかったのでインストールが始まった。

少し容量が大きいので時間がかかる場合がある

これが終われば、以下の画像のようになる

この状態からpythonのシェルを起動してみよう

$ python3

と入力して実行

そしたら以下の画像の状態になり、pythonのシェルを起動することができた

このようにDckerを使うことで簡単にOS・プログラムの入った計算環境などを再現することができる

Chapter4 4-4-8 スタックとSSH鍵削除

4-4-8 スタックとSSH鍵削除

スタックとSSH鍵を削除するコマンドを使うにはまずEC2からログアウトして
コマンドラインに戻ろう

次のコマンドで戻れる

$ exit

コマンドラインに戻れたら

4-4-5、4-4-6で作成して必要なくなったスタックとSSH鍵を削除していく

$ cdk destroy

このコマンドでスタックを削除していく

次に

$ aws ec2 delete-key-pair --key-name "HirakeGoma"

$ rm -f ~/.ssh/HirakeGoma.pem

この2つのコマンドを実行してSSH鍵を削除

これでスタックと鍵を削除することができた

Chapter4 4-4-4 デプロイ実行 で「aws_cdkという名前のモジュールがありません(ModuleNotFoundError: No module named 'aws_cdk')」と出るエラーの解決法

4-4-4 デプロイ実行 で以下の画像のようなエラーが出た場合の解決法

エラーの解決法

以下のブログの解決法と同じことをすれば解決することができます

ht20a092.hatenablog.com