カタベログ

IT技術に関するブログを書きたい.食べ物関連はInstagramをご参照の事.

G検定合格しました

事前知識と勉強内容

自分は2011年から2013年まで大学・大学院の頃にニューラルネットワークあたりを勉強してました。 そこから2018年まではAI・機械学習関連の些細な情報を収集したりしてまして、2018年から2年の間実務で触れていた感じでした。 勉強は以下のサイトにまとめられている内容を何回か読んだぐらいです。

qiita.com

試験難易度

自分が想定しているよりも難しかったです。 歴史、用語理解、法律、理論知識、簡単な計算が大まかに出題されました。 ジェネラリストと言うぐらいなので舐めてましたが、自分が思っているよりも少し踏み込んだ知識が必要でした。

自然言語とか自動運転の話題が多かったです。 LSTMやU-NETのネットワーク構造の話とか出たりして少し驚きました。事前準備不足だからかな? 強化学習関連も理論知識で出題されており、確かにジェネラリストですねって感じました。

試験問題数が200問あるのも改めて目の前に出されるとビビりますね。 サクサク答えられれば時間的に余裕はありますが、集中力もかなり使うので結構しんどいですね。

気になった点

一部でも指摘されてますが、監視がないのでカンニングできてしまう環境です。 問題数が時間に対して多いので、カンニングなんてしてたら終わらないので、それが対策なのかな?

連絡

昨日の14時ちょっきりにメールが着てました。 証書発行まで1ヶ月程度かかるようです。 合格者数も多いから事務手続きに時間がかかる感じですかね。

サーバレスなWebアプリ作りました

背景

  • 自分の手で一度Webアプリを作って少しでも実績を積みたい
    • 簡単な入出力アプリの作り方も漠然としか分からない
    • Webアプリを作ったことがない
  • ついでに時間かかっても色々最近のトレンドをキャッチアップしたい

成果物

https://www.tkm-webapp.ml/

構成

構成図

f:id:tkm1988:20200523213045p:plain
AWS構成図

drow.ioで書きました。

説明

所感

  • コストはRoute53が一番高い
    • 無料枠がどれもあるので50円ぐらいしかかからない
  • CloudFrontのせいでデバッグしたあとの修正版デプロイが面倒臭い
    • キャッシュしちゃうのでそれを削除する操作が必要
    • これも規定回数以内は無料
  • API Gatewayのエンドポイントを間違えていたけどエラーが分かりづらい
    • preflightが通らないとか、認証できないとかそんなエラーが出る
    • 色々調べて改めて見返したらエンドポイントのURIを間違えていた
    • こう言う作業が知識を深めるのに役立つけど中々辛かった
  • Lambdaのデバッグって思ってたより簡単だった
    • CloudWatchでログが確認できる
    • Pythonで作ったがprintメソッドで簡単に出せる
  • だらだらやり過ぎた
    • いくら素人でも1年はかけ過ぎた

今後の展望

特にないです。なんかアイディアあったらコメントください。 んー、勉強的な意味ならDBとか認証・認可の仕組みとかかなぁ。

最後に

GitHubに今回のコードあげてます。とても暇ならご覧ください。

github.com

Alacrittyの導入

記事の目的

Alacrittyという新しいターミナルエミュレータを知ったので簡単に紹介する。

環境前提

# 項目 詳細
1 機種 MacBook Pro (13-inch, 2017)
2 OS macOS Catalina 10.15.4
3 CPU 2.3 GHz デュアルコアIntel Core i5
4 MEM 16 GB 2133 MHz LPDDR3
5 グラフィックス Intel Iris Plus Graphics 640 1536 MB

Alacritty とは?

GPUを用いて高速化を図ったターミナルエミュレータです。 誰かがTwitterで紹介してたので知りました。 ターミナルエミュレータサードパーティー製品はMacだとiTerm2が有名ですね。

github.com

導入方法

簡単に書けば以下です。 homebrewの導入方法は割愛しますが、公式サイトに書いてるコマンド実行するだけだから簡単ですね。 Githubには他のOSでのインストール手順も記載されてます。 英語が苦手な方はページ全体を翻訳かければ良いと思います。

  1. homebrew のインストール
  2. brew cask install alacrittyでインストール

起動結果

こんな感じ。デフォルトだと文字小さすぎて目がしょぼしょぼする。

f:id:tkm1988:20200509114844p:plain
Alacritty ScreenShot

設定ファイル

You can find the default configuration file with documentation for all available fields on the GitHub releases page for each release. Alacritty doesn't create the config file for you, but it looks for one in the following locations:

設定ファイルは自動的に生成されず、自分で指定の場所に置けば良いとのこと。 また、設定ファイルの雛形はGithubのリリースページにあるよだって。 という訳で、リリースページで"alacritty.yml"で検索かけると見つかるのでDLして所定の場所のいずれかに置けばOKです。

設定変えるのは気が向いたらやります。

ワークショップ: Apache Spark™ によるデータパイプラインと機械学習の統合 に参加した

f:id:tkm1988:20191127220026j:plain
会場風景

2019年10月24日、ついに日本法人もできたDatabricksが主催するワークショップに参加してきた。

続きを読む

SageMakerでApache Airflowが触れるので試してみた

きっかけ

2018年のAWS Re:Inventで発表されたあたりからずっと触ってみたいと思って何もしていなかった。 三連休だし、でも台風だから外に出れないしなので触ってみることにした。

方針

AWSさんは初心者に優しいのでSampleをGithubに公開してくれてます。 使わないのも勿体ないので使わせていただくことにした。 AWS CloudFormation使ってAmazon EC2Amazon S3Amazon RDS、 そしてAmazon SageMakerを使ってApache Airflowによる機械学習パイプラインのサンプルが作れます。

github.com

注意点

READMEにあるボタンから作ると、リージョンがオハイオになる。 自分はあらかじめ用意したサンプル用とは別のS3 Bucketに、 git cloneでローカルにダウンロードしたファイル全てあげた上で、 CloudFormationのスタックを作成することにした。

作業の流れ

READMEにあるように、EC2キーペアの作成をあらかじめ行います。 ボタンぽちぽちするだけで簡単にできちゃいます。

あとはスタックの作成ですが、これも簡単で入力するのは以下ぐらい。

  • Amazon S3 URLにあらかじめアップロードしておいたyamlファイルのURLを指定する
  • スタックに適当な名前をつける
  • RDS用のパスワードを設定する
  • あらかじめ作成したEC2のキーペアを指定する
  • S3 Bucket名をユニークかつ既存のバケット名に被らないように設定する

スタックを作成開始したら10分15分ぐらい待ってれば出来上がります。 うまくいかないときはスタックのイベントを確認してトラシューしましょう。 自分はS3 Bucket名あたりでS3の仕様を忘れててハマりました。

EC2のページでインスタンスDNS名を特定し、 httpでブラウザからアクセスすればAirflowがさわれます。

細かい話は、AWSさんは初心者に優しいので説明ページがあるのでそちらご覧ください。

aws.amazon.com

クロージング

CloudFormationのページでスタックを削除すれば S3 Bucket 以外は削除されます。 上述のページにあるように、空ではないS3 BucketはCloudFormationからは削除できません。

感想

Airflowのやり方でSageMakerを動かせるのは良い点だと思いました。 サンプルではEC2やRDSを使ったりしていますが、 ECSやEKSを使ったりみたいにインフラ構成を変えてみるとコスト最適化や柔軟性が生まれそうだなって思います。

PyConJP 2019(二日目)に参加した

#pyconjp

What's PyCon JP ?

公式サイトより引用。

PyConは、Pythonユーザが集まり、PythonPythonを使ったソフトウェアについて情報交換、交流をするためのカンファレンスです。 PyCon JPの開催を通じて、Pythonの使い手が一堂に集まり、Pythonにまつわる様々な分野の知識や情報を交換し、新たな友達やコミュニティとのつながり、仕事やビジネスチャンスを増やせる場所とすることが目標です。

pycon.jp

きっかけ

  • 学生時代(2010〜2013あたり)からPythonにお世話になっていた
  • 日本で一番有名なPythonのカンファレンスだから学びが多いのではないかと考えた
  • インフラ系に配属となったのでプログラミングから離れてしまいPythonと疎遠になった
  • 最近は仕事内容が変わったことを受けて仕事やプライベートで触れる機会が増えた
  • もっと外に出て中にいたら分からないことをもっと知ろうと思った

聴講したセッション

発表資料は概ねこちらに掲載されてます。

pyconjp.connpass.com

I will never restart! Automatic hot reloading in CPython

  • Python3では一度importしたモジュールを再読み込みするのにはimportlib.reload()を用いる
  • ちょっとした変更を反映するだけなのにサービスやサーバの再起動なんてことは不要にできる
    • ファイルの更新イベントを検知してimportlib.reload()すればいい
    • mighty_patcher(下部リンクご参照)を使ってイベント検知を実装する例を示してくれた
    • 調べてみるとwatchdogを使う例もQiitaに上がっているようなので初心者はそっちの方がいいかな
  • モジュール更新の手段であり誰でもいつでも自由にデプロイして良いという話じゃないことは留意したい思う

github.com

unittestで始めるユニットテスト入門

  • 学生プログラミングと社会人プログラミングの一番の違いはテストだと思っているのでお勉強のために参加
  • 人気の外部テストライブラリであるPytestへも移行しやすい標準ライブラリなので学ぶ価値が高いライブラリだと考える
  • 会場にいる多くの方々はunittestを使ったことがないようで、みんなどんなテストしているのかが気になった
  • with文をただのファイル読み書きの便利機能ぐらいにしか思っていなかったが、unittestでも使われるのでちゃんと知りたいなって思った

https://reiki4040.hatenablog.com/entry/20130331/1364723288/reiki4040.hatenablog.com

新米Pythonistaが贈るAirflow入門 & 活用事例紹介

  • 機械学習分野でよく使われているので気になって聴講
  • AirflowをAWS Fargateを基盤にAWS上でETLを実現していた
  • 改めて思う事としてはJP1とかとは狙っている層が違うなって思う
    • ジョブフローをPythonコードで定義するのですべてPythonに集約したい人たちのもの
    • Pythonを書けない人は使えない(当たり前)
    • Pythonでシステム運用のスクリプト書く人も珍しいので、あくまで業務系処理を書く人たちの選択肢だと思う

github.com

pytestによるCIレボリューション

  • 自分の出自ととても似てて驚き
  • 前段のセッションでunittestの話聞いてから聞いたので飲み込みやすかった
  • 今時のIDEVSCode、PyCharm)はどれもPytestに対応している
    • Emacs以外も使った方がいいかなってちょっと思った

その他

  • Lightnig Talk久しぶりに聞いた
  • Python製シェル xonshの紹介
  • pythonで、処理をより効率化するためのTips集
  • Python in the Belle II experiment
  • 当日応募の方による飛び込み
  • OSC in Hokkaidoで見ていたネタLTは意外には少ないなって思った
  • 備忘の意味も込めてポスターセッションやLTで調べた時に参考にしたURLを貼っておく
    • ほとんどQiitaじゃねぇか…

qiita.com qiita.com qiita.com qiita.com github.com

感想

  • 機械学習のブームもあってもっと人いるかと思ったけどそうでもなかった
    • 機械学習を前線で進めているのは昔からPythonとかを触っていた人たちだったとか?
    • SIerの人たちも一からモデル作る事しているなんてのはそこまで多くないだろうし、人数に影響しなかった?
    • 機械学習はそれに特化したコミュニティがあって、PyConのような広くPythonを扱った場所にはあまり出てこないのかも?
    • もちろん発表者や求人、企業ブースには機械学習関連の方々がいらっしゃったので、昨年比来場者急上昇だったのかもしれない
    • 1,160名が、チュートリアルやスプリントを合わせた参加者数らしい
  • これをきっかけにPythonエンジニアに転身できたらいいなって思った
    • もっとコミュニティが発展して欲しいし、それに寄与する方法の一つにもなるかな
  • 今度はちゃんと2日間全部出て学びをもっと得たい

Google Colaboratoryでライブラリのダウンロードが遅くて困った話

TL;DR

気づき

Google Colaboratoryで日本語の形態素解析とか動かそうと思ってJuman/Juman++、KNPとか入れようとしました。 しかしながら、wgetで京大のページからダウンロードしようとしたらやたらめったら遅い。 Google Colaboratoryの仕様で遅いのかなと調べてみたけど、むしろ早いという触れ込みが多いし、pip3とかはたしかに早い。

頭使って考えた結果、Google Colaboratoryは日本国外のサーバで動いていて距離が影響して遅いのではないかと仮説を立てた。 最も簡単に距離を縮める方法を考えた結果、もうGoogleドライブに入れちゃえばいいじゃんという結論に至った。 何回もダウンロードしなくても、一回アップロードすれば後はマウントすれば終わりだからオーバーヘッドも減るし。 実際、ドライブへのアップロードはColaboratoryでダウンロードより早いし、かなり楽になった。