ecsにおけるunicronのgraceful shutdown
コンテナのライフサイクル
タスクが停止すると、各コンテナのエントリプロセス (通常は PID 1) に SIGTERM シグナルを送信します。
タイムアウトが経過すると、今度は SIGKILL シグナルをプロセスに送信します。
デフォルトでは、SIGTERM シグナルの送信後 30 秒のタイムアウトで SIGKILL シグナルを送信します。
ECS のアプリケーションを正常にシャットダウンする方法 | Amazon Web Services ブログ
SIGKILLされるまでの時間はデフォルトで30秒でMAXで120秒のようだ。
そんな重い処理はないので今回は考える必要はないがSidekiqやResqueなどでそれなりに重い非同期処理をしたい場合は何か必要。
バッチ化するとかキューを積み直すとか???
unicornの挙動
unicornにSIGTERMを送った場合は即シャットダウンでgraceful shutdownしたい場合はSIGQUITを送る必要がありそう
unicornでSIGTERMを受け取ったらSIGQUITする処理を実装する
unicorn.config
before_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn master intercepting TERM and sending myself QUIT instead' Process.kill 'QUIT', Process.pid end end after_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn worker intercepting TERM and doing nothing.' end end
実際にgraceful shutdownするか確認
1. sleepを入れたapiを作成する
class TestController < ActionController::API def test sleep(10) render text: 'OK' end end
2. apiをコールしてsleep中にunicornにsigtermを送る
root@06b4da6d0c07:/app# ps aux | grep unicorn root 1 0.4 1.2 90216 24964 pts/0 Ss+ 11:03 0:00 unicorn master -p 3100 -c /app/config/unicorn/development.rb root 8 2.0 5.3 661524 109292 pts/0 Sl+ 11:03 0:02 unicorn worker[0] -p 3100 -c /app/config/unicorn/development.rb root 9 2.0 5.3 661524 109168 pts/0 Sl+ 11:03 0:02 unicorn worker[1] -p 3100 -c /app/config/unicorn/development.rb root 10 2.0 5.3 661536 109280 pts/0 Sl+ 11:03 0:02 unicorn worker[2] -p 3100 -c /app/config/unicorn/development.rb root 11 2.0 5.3 661520 109176 pts/0 Sl+ 11:03 0:02 unicorn worker[3] -p 3100 -c /app/config/unicorn/development.rb root 12 2.0 5.3 661540 109188 pts/0 Sl+ 11:03 0:02 unicorn worker[4] -p 3100 -c /app/config/unicorn/development.rb root 13 2.0 5.3 661528 109280 pts/0 Sl+ 11:03 0:02 unicorn worker[5] -p 3100 -c /app/config/unicorn/development.rb root 14 2.0 5.3 661548 109200 pts/0 Sl+ 11:03 0:02 unicorn worker[6] -p 3100 -c /app/config/unicorn/development.rb root 15 2.0 5.3 661544 109188 pts/0 Sl+ 11:03 0:02 unicorn worker[7] -p 3100 -c /app/config/unicorn/development.rb root 128 0.0 0.0 4840 856 pts/1 S+ 11:05 0:00 grep unicorn root@06b4da6d0c07:/app# kill -TERM 1
3. OKレスポンスが返ってくることとlogが出ていることを確認する
unicorn.stdout.log
Unicorn worker intercepting TERM and doing nothing. Unicorn master intercepting TERM and sending myself QUIT instead
お金をかけないでwebサイトを作ってみた
1.何をつくったか
webで使えるタスク管理ツール。
本当に忙しいときはやるべきタスクが全然終わらずにあっという間に一日が過ぎてしまう。
本当はタスクが溢れたら、誰かに任せるなり、期日を調整するなり、上司に相談するなり。。。遅れそうになった時点で様々な対策をする必要がある。
頭では分かっているが、気づけばお昼ご飯を食べるのも忘れて夜になるなんてことも結構ある(ToT)
そのため、1時間ごとに予実を管理できる且つ1時間ごとにアラートで知らせてくれるものを作りたいと思った。そうすれば早めに遅延に気づいて様々な対策ができると考え下記のサービスを作った。
2.使った技術
特にNetlifyは助けられました。ドメイン代もサーバー代もかからずに無料でサイトを簡単に公開できました。サイト登録から公開まで15分くらいでできました。
githubと連携しているのでmasterにpushしたら自動でデプロイして公開してくれます。
3.苦労したところ
デザイン
Bootstrapがあったからまだよかった。それでもかっこよく使いやすくつくるのは難しい。webデザインしてる人を見る目が変わった。
同じようなTODO管理ツールやWEBサイトをみてとりあえずまねした。
ランディングページの作成
New Ageっていうサイトのランディングページの無料テンプレートをベースに作成しました。最初はテンプレートを使うという発想がなかったため自力で作ろうとしてました。
4.まとめ
作成期間は1か月くらいでした。Netlifyのおかげでプログラムを書くことに集中することができました。サーバー周りはあまり強くないので本当に助かりました。
マネタイズは考えてないので次に何か作るときはそこまで考えて作ってみようかなと思いました。
AIジョブカレの機械学習講座に通ってみての感想
1.AIジョブカレとは
人工知能技術を専門としたプログラミングスクール。
私が通った機械学習講座以外にディープラーニング講座やR講座などがある。
AI技術専門スクールの人工知能講座一覧 | AI技術専門スクールのAIジョブカレ
2.AIジョブカレに行こうと思った理由と特徴
下記でも書いた通りに、流行りの機械学習をオフライン(通学)で学びたかったため。
値段は決め手ではなかったが、8回の講座で10万円と安いのもよかった。
3.カリキュラム内容
人工知能専門の教育と仕事紹介のワンストップスクール | AIジョブカレ より引用
※2019年11月時点での内容です。
4.良かったところ
・講師の人がバリバリのデータサイエンティストをやっている方だったのでビジネス目線の話がたくさん聞けてためになった。
こういう生の声はネットで検索などでは得ずらいのでよかった
・安い。コスパはよかったと思う。
・講義を動画で見られる。
毎回、講義を動画でとっているので業務都合で行けなくても、見られるし復習にも使えるので、よかった。
・卒業生のスラックコミュティに入れる
AIジョブカレの告知情報もあるが勉強会の情報だったり新年会の誘いだったり有益な情報も流れてくる
5.悪かったところ
・グループワークをもっとやってほしかった
グループワークは1回しかなかったので他の人の意見とか聞きたかった。
講師の話を黙々と聞く形式だったので教室でわざわざ集まってやっているメリットをあまり生かせていなかった気がする
6.率直な感想
行ってよかった思います。やっぱり通いだったのでモチベーションが落ちることなく学び続けれたと思います。
そして、結構大変だった。私は学生時代は統計学を学び、社会人ではシステムエンジニアをやっていてある程度ベースはあったがついていくのでやっとでした。。。
ごりごりコーティングするというよりはコーティングもしつつ統計的な話もしつつビジネス目線の話もしつつという感じで浅く広く学べました。
AIジョブカレを出たからと言って即ビジネスで通用するレベルではないですが、スタートラインには立てた気がします。
機械学習のスクールの比較
1.機械学習を学びたいと思った理由
単純に流行ってるので、SEとして今後必要になってくると思ったのと、学生時代に統計学を少し学んだので興味があった。
2.機械学習をスクールで学ぼうと思った理由
機械学習の本読んだり動画をみたが難しすぎて独学だと挫折しそうだと思った。
SEをやってるので何か新しいプログラミングを学ぶくらいだったら勝手がわかっているのである程度は自力でできる。
しかし、機械学習は統計学がからんできて理論を学ぶ必要があったため。きちんと学びたいと思った。
3.機械学習のスクールで何を重視したのか
下記の2点を重視して機械学習のスクールを探しました。
・集団での講義形式であること
周りに人がいると高いモチベーションで最後まで保って学習できると思った。
そして、どんな人が学びに来ているかに興味があり、ここで知り合いができたらいいなと思った。
・ある程度、機械学習の高いレベルのことが学べる
SEであるためある程度はプログラムは書ける。そして、学生時代は統計学を少し学んでいたため、基礎の基礎は不要だと思った。
4.機械学習が学べるスクールの比較
とりあえずネットで調べた限りは下記の6つに絞りました。
実際はまだまだあるんだろうけど候補が多すぎても調べきれないのでこのくらいにしました。
NO | 名前 | 料金 | 期間 | コース | 調べて思ったこと |
1 | 月額 社会人 ¥29,800 入学金 社会人 ¥219,800 |
1ヶ月 | Aiコース Pythonとライブラリを用いて、 「自然言語処理」「機械学習」「ディープランニング」 の基礎を演習を通じて学んでいきます。 |
教材が与えられそれを自分で解いていきながらカリキュラムを進めていき、わからない点や理解が追いつかない点をメンターに質問するという形式だとのこと。集団での受講形式ではないため却下 | |
2 | 480,000円 | 3ヶ月 | AIアプリ開発コース 画像認識を利用した機械学習を用いたWebサービスを作成するコースです。データの取得から、機械学習アルゴリズム、Webアプリの実装までの流れを学ぶことができます。 |
オンラインで基本的にはコースを選択して受け放題のようだ。 自分が学びたいものを選択して学べるのはいいと思った。しかし、オンラインなので却下。 |
|
3 | Tech Academy | 139,000 | 1ヶ月 | AIコース 機械学習のライブラリを使って実装を行います。 実務に近い形で学習し、社会でも通用するスキルが身につきます。 |
回数無制限の課題レビューしてくれるよう。 できるまでみてくれるので、課題が難しいと思っても最後まで完結できそう。しかしオンラインのため却下 |
4 | 侍エンジニア塾 | 980,000円 | 6ヶ月 | AIコース Pythonの基礎学習 チャットボットやスマートスピーカーなどを土台にAIを実装 機械学習 / 深層学習 / 自然言語処理 / 画像 / 動画解析 / ブロックチェーン / データサイエンスなどの基礎学習とAIを基盤としたオリジナルサービス開発 |
完全オーダーメイドカリキュラムで自分のスキルに合わせてカリキュラムを決めてくれてるとのこと。 授業形式は専属マンツーマン指導(対面またはオンライン)。マンツーマンなので却下。 |
5 | .Pro | 432,000円 | 6ヶ月 | Pythonコース 人工知能や機械学習を学ぶ、プログラミング特化コース プログラミングによる数値演算や機械学習を学び、プログラマーとしてさらなる飛躍を目指します。Pythonは「youtube」「Instagram」の開発にも用いられているほど、世界的に人気のあるプログラミング言語です。日本だけにとどまらず、グローバルに活躍する人材を目指します。 |
少人数のグループ制で講義を行うっぽいので探していた形式。しかし、情報が少ない。何が学べるかがホームページを見てもわからなかったので却下。 |
6 | AIジョブカレ | 100,000円 | 4ヶ月 | 機械学習講座 AIジョブカレ機械学習講座を修了すると、AI(人工知能)を実務で活用できるようになります。 具体的には、データの前処理、計算ロジックやモデルの設定、Pythonライブラリを使った人工知能の実装・評価、チューニングまでを一人でできるようになります。 |
6.結論(どこの機械学習スクールにしたのか)
色々調べた結果「AIジョブカレ」さんにしました。
そもそも集団形式講義のスクールがない。確かによくよく考えたら、集まってみんなで受ける形式はビジネスモデル的にも難しいのかも。オンライだと全国の人相手に商売できるしね....ということでオンライ講義のスクールが多い中、オフライン講義をやってる、「AIジョブカレ」さんにしました。「.Pro」さんもオフライン講義やってたけど、情報がなさ過ぎて今回は見送りました。
「AIジョブカレ」さんに通ってみての感想は近々書きます。
機械学習入門
機械学習とは
明示的にプログラムを書くのではなく膨大なデータよりコンピューター自身で学習させる技術である。
機械学習は「教師あり学習」、「教師なし学習」、「強化学習」の3つに分類される。
教師あり学習
結果と原因の関係性を学習するもの。
あらかじめに決められた正解ラベルに従って学習していくもの
分類と回帰がある
分類(Classification)
あるなしなどの分類を行う。
例:解約する会員予測など
回帰(Regression)
数値の予測
例:物件の価格予測じなど
教師なし学習
膨大のデータから規則性を見つけ出しデータのパターン化を行う
例:購買情報からユーザーをグルーピングする
強化学習
プログラム自身で与えられた報酬を最大化するように学習していく
例:AlphaGO(囲碁プログラム)
基本的なSQL文
下記の記事書いているときに少し怪しかったのでここに改めてメモしとく。
特にINSERTとUPDATEが怪しかった....
データ抽出
どこのテーブルから何の情報(条件)を参照するか。
下記の例でいくとuserテーブルからidが1の情報を参照する。
「*」は全てのカラム情報を参照するという意味。
nameの情報だけほしい場合は「*」のところを「name」に変える。
nameとageの情報が欲しい場合はカンマ区切りで「name,age」にする。
実行SQL
SELECT * FROM user WHERE id = 1;
データ登録
どのテーブルに何の情報(登録する値)を登録するか。
下記の例でいくとuserテーブルにid(1)とname(hoge)とage(12)を登録する。
(id,name,age)の部分は省略可。
実行SQL
INSERT INTO user(id,name,age) VALUES(1,'hoge',12);
データ更新
どのテーブルに何の情報(登録する値)を更新するか。
下記の例でいくとuserテーブルのidが1のname情報をtaroに上書きする。
実行SQL
UPDATE SET name='taro' WHERE id = 1;
データ削除
どのテーブルの何の情報(登録する値)を削除するか。
下記の例でいくとuserテーブルのidが1のレコードを削除する
DELETE FROM user WHERE id = 1;