ゲンゴ

広くゆるくソフトウェアと機械学習について。

Athenaでスキャンサイズ上限の設定ができるようになった!

Athenaではパーティション分割は必須中の必須

AWS AthenaはS3に突っ込んだファイルに対してSQLを投げて直接分析ができるという点でとても魅力的なサービスです。
が、クエリの際にスキャンするデータサイズにしたがって課金が発生するため、うっかりしているととんでもない費用請求になったりします。
そのための手段としてはとにかくきちんとパーティションを設計・設定して、不要なところまでスキャンさせないということをしないといけません。

Athena パーティション設定

パーティションの設定には、

1. S3のフォルダをパーティションに対応する構造に作っておく
s3://バケットの場所/year=2019/month=3/day=1
s3://バケットの場所/year=2019/month=3/day=2
s3://バケットの場所/year=2019/month=3/day=3
(略)
2. Athena側でCreate Tableする際にパーティション設定をしておく
CREATE EXTERNAL TABLE IF NOT EXISTS athena_table_name (
    ...
    ...
) PARTITIONED BY (
    year int,
    month int,
    day int
)
    (以下略)
3. フォルダが増えていったら、都度Alter Tableしてパーティションを追加
ALTER TABLE athena_table_name 
ADD PARTITION (
    year='2019',month='3',day='20'
) location 's3://バケットの場所/year=2019/month=3/day=20'

というお作法を踏んでいけばOKです。
あとはパーティションを意識して必要な範囲に絞ったクエリを投げる。

それでもビッグデータ破産の恐怖はなくならない

ところが、この地道な作業(当然パーティションを追加していくところは自動化するとして)をしてパーティションをきっちり構成したとしても、やはり「人間が叩くアドホックなクエリ」という敵がいます。

「Where句面倒だしとりあえず全部まとめて引っ張ってこよう」という方も中にはいらっしゃるかもしれない。
データ量によってはAthenaだけで数十万円とか数百万円とかいってもおかしくないわけで、予算表の圧を受けながら仕事をしている身としてはやはりびびります。

 (Athena環境作ったはずなのに、この恐怖に耐えかねて結局Athenaを破棄して普通のRDSにデータを流すことにしたという苦い過去があります。)

Athena Workgroup, データ利用制御機能リリース

 
しかしとうとう、AWSの中の人から朗報が届きました。

Athenaでクエリスキャンの上限が設定できるようになったとのこと。ヤッターー!

docs.aws.amazon.com

あらたにWorkgroupという概念が導入され、このWorkgroupの単位でスキャン上限だけでなく、接続ユーザ・アプリケーションやワークロードなどの管理もできるようになったようです。

これは本当にいいアップデートですね…。もっと早く出してくれればさらに嬉しかったです…。

クエリスキャン上限設定の手順

Athenaに入ると画面上部(Glueリンクのお隣)に新しく「Workgroup: primary」というリンクができています(primaryというのはデフォルトのWorkgroup名)。

f:id:santashack:20190301164004p:plain


このリンクから入った画面でひとつWorkgroupを選択し、「View Details」ボタン押下した先の画面にある「Data Usage Control」タブがお目当ての場所です。

f:id:santashack:20190301164059p:plain

10MB以上にはなりますが、ここから1クエリあたりのスキャンサイズ上限を設定することができます(設定値を超えた場合はクエリキャンセルとなります)。

これで一安心

これでAthenaを使う安心度がぐっと上がりました。
Athenaを使ってデータレイク構想を進めようとしていた皆さん、サーバレスで簡単に分析環境つくりたい皆さん、これで相当やりやすくなったんじゃないでしょうか。

ML論文探しのお助けサイト "Papers With Code"

アカデミアにいない人間が機械学習の論文を探すとき使うのは、 arXiv.org とか Google Scholar が基本でしょうか。

ただ、少なくとも機械学習であれば、論文だけでなく実装も一緒に見たいですよね。

これが簡単にできる「Papers With Code : the latest in machine learning」というサイトがあるようです。

 

paperswithcode.com

 

元々はGithub上で展開していたよう?ですが、素敵なサイトになりました。

いいなあと思ったのは以下。

 1. 論文だけでなくて、実装コードも同じ画面から入手できる

 各論文のページに入ると、アブストの表示の下にFull paperをDLできるボタンと合わせて、コードのGitリポジトリへのリンクが張られています。

arXivのペーパーがGithubリポジトリへのリンクを持っている、もしくはGithubリポジトリarXivペーパーへのリンクが張られていれば、それがペアになってこのサイトに掲載されるようです。

論文著者だけでなくいろんな人が実装していらっしゃると思いますが、それらが(うまくリンクが拾われていれば)1画面にリストされるというのはなかなかステキじゃないでしょうか。

 2. タスク別手法別のスコアがすぐに分かる 

世の中には機械学習手法を評価するための様々なタスクがありますが、各論文で提案されている手法がどのようなタスクでどのようなスコアを出しているのか、または逆に、各タスクに対してどのような手法たちがどんなスコアを出したのかが、すぐに分かります。

「最近このタスクはどんな手法が優位なのか」を知りたいときに、ひとつのサイト上でぱぱっとランキングも見られて論文も見られてコードも見られるのは便利です。

 3. 分野別に論文・タスクがまとまっている 

これはわたしのような初心者・初学者には嬉しいところ。

機械学習の適用分野は広いので、特に勉強し始め+周りに先達もいないような場合は、自分の目的に合った応用系の論文を探すのに一苦労です(心折れます)。

このサイトは論文・タスクを応用分野別に見やすくカテゴリ/サブカテゴリに分けてくれているので、あまり迷うことなく関心に近い論文やタスクを見つけることができます。

例えば自然言語処理なら、以下のような粒度でサブカテゴリが作られています。

  • Machine Translation
  • Question Answering
  • Language Modeling
  • Sentiment Analysis
  • Text Classification
  • Text Generation
  • Natural Language Inference
    …まだまだあります。NLPだけで50以上のサブカテゴリ。

 

 とまあざっくりこんな感じのサイトです。まとめると、

  1. これまでGoogleにて論文・コード・タスクをそれぞれ検索して探していたような方々にとっては無茶苦茶手間が減って便利そう
  2. 初心者を応援する導線

バリバリ機械学習を活用されている先輩方だけでなく、わたしのような孤独な初学者にとってもありがたいサイトだなあと思いました。

(サイト全体がかわいらしく見やすいのも個人的には推しポイントです!)