ニートの言葉

元ニートがやってみたこと・その過程で学んだこと・考えたこと・技術メモあたりを主に書いています。情報革命が起きた後に訪れるであろう「一億総ニート時代」の生き方を考え中です。

【Kubernetes】1週間かかる処理を1.5時間で終わらせた【並列処理】

こんにちはあんどう(@t_andou)です。

今回はKubernetesを使って並列処理させた記録です。

まだ「とりあえずそれっぽく動くまで試してみた」という段階で、kubernetesを理解できてはいないので自分用のメモを公開しているという認識でご覧ください。

間違っている部分や、よりスマートなやり方がありましたらご指摘いただけると幸いです。

この記事の概要

機械学習に使う特徴量の作成で1週間かかりそうな処理を10分くらいで終わらせられないかと考え、GKE(=GoogleのKubernetes環境)を使い試行錯誤した記録です。

今回は一部失敗して完了時間が1.5時間になったものの、設定を上手く出来れば15分程度で終わる見込みです。

 

対象読者

・Kubernetesの概要は知っているくらいのレベルの人
・KubernetesのJobを使った並列処理をしたい人

目次

  • この記事の概要
  • 対象読者
  • 目次
  • 背景
    • どのくらい時間がかかっていたのか
    • どうやって処理時間を短縮するのか
    • なぜKubernetesなのか
  • やってみたこと その1:処理部分を独立させた(失敗)
    • 構成
    • 処理の流れ
    • 困ったこと
      • MySQLへの接続部分
  • やってみたこと その2:データをGCSにダンプした(失敗)
    • 構成
    • 処理の流れ
    • 困ったこと
      • デフォルトではGCSへの書き込み権限が無い
      • Nodeの容量不足
  • やってみたこと その3:永続ボリュームにデータを配置した(成功)
    • 構成
    • 処理の流れ
    • 困ったこと
      • 永続ボリュームの読み書き権限周り
      • 使えるvm数に制限がかけられていたのでリクエストが必要だった
  • 完成したymlとシェルスクリプト
    • クラスター作成
    • 永続ボリューム
    • ジョブ実行
  • かかった料金
    • Kubernetesのマスター管理料金:無料
    • データ転送料:ほぼ無料
    • データのストレージへの保管料金:数円
    • VMの料金
      • VMの料金見積もり
    • 合計金額
  • 分からないこと 
    • ReadOnlyManyでPVCを作成する時に最初のデータ配置をどうするのか
    • jobsのCOMPLETIONSが途中で減ることがあった
    • 処理から抜けているものが複数あった
    • GKEのアップデートが始まって時々接続できなくなった
  • 参考にした資料
    • Webページ
    • 書籍
  • 最後に
    • 処理時間について
    • 用途について
  • おまけ:試行錯誤のツイート
続きを読む

高精度でテキスト分類を行えるAIの環境を用意しました【BERT】

 

こんにちは、あんどう(@t_andou)です。

最近、自然言語処理のAIの一種であるBERTをよく触っています。

今回はBERTのソースを読まなくてもサクッと試せる環境を用意しましたので、メモとして残しておきます。

BERTとはどういうものか


画像引用:https://arxiv.org/pdf/1810.04805.pdf

凄くざっくりと説明すると、BERTとは2018年末にGoogleの人たちが開発した自然言語処理において汎用的に使えて精度の良いAIです。

自然言語処理において精度を測るためにいくつかのタスクがあるのですが、発表された時点ではダントツの成績でした。

仕組みなどの詳細については論文を読むか解説記事をググってください。

2019/09/22時点で既により精度の良い手法がどんどん発表されていますが、BERTの情報量と比べるとまだ少ないため、入門としてはBERTを触ってみるのが良いと思っています。

どんなものに使えるか

詳細は書けませんが、僕は実際の仕事で

  • ある文書からその業種を推定する
  • 面接時の受け答えのテキストから面接の評価スコアを付ける

と言ったことに使っています。

他にも、今回の学習方法では使えませんが

  • 質問を投げると答えを抽出してくれるシステム*1

などにも利用されているようです。

作ったもの

繰り返しになりますが、今回はBERTのソースを読まなくても試せる環境を用意しました。公式のソースを少し修正し、実行環境を用意しただけですが。→github , Google Colab

出来ること

自前のデータセットを用意することでテキスト分類をしてくれる人工知能を作れます。

使い方

1.データセットの用意

データセットの形式としてはtextとlabelの2カラムのtsvで
学習用、検証用、テスト用にそれぞれtrain.tsv , dev.tsv , test.tsvというファイル名で用意してください。

2.GoogleDriveにアップロード

1で用意した3つのファイルをGoogle Driveにアップしてください。

※Colab上にアップしても良いですが、ランタイムのリセットで消えてしまうためDriveがオススメです

3.Google Colabを自分のドライブにコピー

今回用意したGoogle Colabはそのままだとコメントしか出来ない状態にしているため、ご自分のドライブにコピーしてください。

4.自分のデータセットに合わせてパス・ラベルを修正

下記の箇所を修正してください。

  1. DATADIR:学習させたいデータセットを置いたディレクトリのパス*2
  2. FINETUNE_OUTPUT_DIR:学習したモデルを出力するディレクトリのパス
  3. LABEL:学習させるラベル一覧
5.学習開始

その後、上から順に実行していくと「4.Train」の箇所で学習が開始されます。

学習完了までの時間はデータセットの量によって変わってきますが、10万件弱のデータセットで2~3時間でした。

※TPUを使うことでより高速に終わらせることが出来ましたが、その場合はGoogleColabとGoogleDriveだけでは完結できず、Google Cloud Storage(有料)を使う必要が出てくるようですので、今回はパスしています。

6.予想の計算

「5.Predict」を 実行するとテストデータに対して予想を計算してくれて、データセットのディレクトリにtest_results.tsvというファイルで出力されます。

最後に

BERTを使い、テキスト分類のタスクを簡単に行えるようにしました。

今回は多言語モデルという日本語を含む色んな言語に対応したモデルを利用しましたが、日本語モデルを公開してくださっている方もいらっしゃいますので、日本語に特化した問題であればそちらを利用した方が良いかもしれません。

参考

https://github.com/google-research/bert

*1:https://www.pragnakalp.com/demos/BERT-NLP-QnA-Demo/

*2:もしもアップロードしたデータセットのパスが分からない場合はGoogleDriveをマウントした後でパスをコピーするとわかりやすいです

【解決】MacOSをCatalinaにしたらFireFoxが開けない

こんにちは、あんどう(@t_andou)です。

最近発表されたMacのOS「Catalina」にしてみたところ、FireFoxが開けなくなって困ったので、その対策をメモしておきます。

以前のバージョンまでは

以前のバージョンまでは右クリックして「開く」→「開く」を選択すれば開けた*1のですが、今回はFireFox自体は開けているのかもしれないですが、Updateでエラーが出て開けなくなってました。(冒頭の画像の状態)

解決策

泣きながらググっていたら解決策を見つけました。

Firefox Developer Edition [and others] not opening in macOS Catalina - Ask Different

  1. terminalを開いて
  2. sudo spctl --master-disable と入力
  3. パスワードを入力
  4. FireFoxが開けた!
  5. sudo spctl --master-enable でセキュリティを戻す

以上です。

最後に

iPad OSとCatalinaを使えばiPadをサブディスプレイに使えてすごく便利です。(sidecarという機能)

以前、duetという有料アプリを購入していたのですが、これよりも反応速度も良く、無線でも使えるのですごくオススメです。さようならduet。

エンジニアになりたい人のためのベーシックインカムハウスを作りたい

 

こんにちは、あんどう(@t_andou)です。 

今回は最近ボンヤリと考えている「やりたいこと」について書きます。

まだ構想段階なので抽象的ではありますが、もしも何か関わりたいという人がいらっしゃいましたらTwitterまたはこちらからご連絡ください。

 

1. 背景:個人的にやりたかったこと

まずは経緯として、僕自身が数年前にやりたいと考えていたことを書きます。

僕は数年前、「ニートハウス」を作りたいと考えていました。
ニートハウスとは「最低限の生活費を貰いつつ好きなことをして生きていける家」という漠然とした構想です。

ニートハウスをやりたかった理由は大きく二つあり

  1. 僕自身がニートだった時期があり、人生に絶望した挙句、自殺未遂を起こしたこともあったため、似たような状況にある人の苦しみを軽減したかったから
  2. 世の中の生産性はどんどん上がっており「人が働く必要性」は減っているにも関わらず「全員が働かないといけない」とか「失業率を下げないといけない」という考えに違和感を覚えていたから

です。

「ニートハウス」に似たものとして「山奥ニート」や「ニート株式会社」のように、ニートが集まった活動はありますが、僕がやりたいこととは何か違うと感じていました。
うまく言語化できないのですが、僕は「人と関わりたくない」とか「何もしたくない」という理由から積極的にニートになろうとする人たちではなく、「今は苦しい状況だけど人生を好転させるために努力をしている人」の力になりたいのだと思います。*1
とは言え、当時は具体的な案もなく、ハウスを運営できるほどの資金も無かったので、漠然としていた「ニートハウス構想」は放置されていました。

それからしばらくして、カイリュー木村さんという方がベーシックインカムハウスというものを始めたことを知りました。
どんなものかというと、アーティストやクリエイターが自身の活動に集中するための環境として、家賃・光熱費無料、さらに毎月1.5万円を支給してくれるシェアハウスというものでした。
このベーシックインカムハウスは「やりたいことがあって、それに集中したい」という人たちを応援するようなコンセプトになっていて、僕がやりたかったのはこれだと気づきました

ところが残念なことに、このベーシックインカムハウスは一年?で終わっていました
詳しい理由は分からないですが、カイリュー木村さんが「趣味でやっている」という発言をされていたようですので、収支の面をあまり考慮していなかったのかもしれないです。アーティストやクリエイターというのは「影響力」という面では良さそうですが、ハウスを運営するための費用を生み出すには厳しかったのかもしれないですね。(勝手な予想ですが)

そこで、収支の面をもう少しシビアに捉えつつ、「ニートハウス」改め「ベーシックインカムハウス」を作れないかを考えました。

働きたくない時は働かなくても生活が出来て、働きたくなったら仕事をして、働いた分だけ収入がアップするような場所。

↓こんなイメージ

 

さて、ここまでは僕の個人的な欲求の話でした。
ここからは上の話を踏まえて、世の中の一般的な課題に結びつけてエンジニア向けベーシックインカムハウスの提案(たたき台)を書いていきます。

2.世の中の流れ

1.エンジニア不足

三年前の資料になりますが、経産省の調査結果によると2030年には79万人のIT人材が不足する可能性があると報告されています。*2

たしかに僕(ITエンジニア)にも仕事の相談がたくさん来ますし、肌感としても人が不足している印象を受けています。

2.エンジニアになりたい人は多そう

そんな調査結果を受けてか、プログラミングスクールやプログラミングの学習サービスは乱立し、プログラマになりたいという人も増えているような印象を受けます。(統計情報などは調べていないので実際の数字は不明ですが)

3.課題感

この世の中の流れはとても良いことだと思っています。
しかし、スクールなどを卒業したからと言って、すぐに現場で活躍できるレベルになるのは稀です。

おそらくスクールを卒業された方々は「未経験者歓迎」と書かれた企業へ応募するでしょうし、スクール卒業生を受け入れる企業は教育すること前提で採用すると思います。

しかし、エンジニアを求めている企業の大半はすぐに活躍してくれる人…言い換えると目の前にある課題を解決してくれる人を探しています(=新規サービスの開発・過去のサービスの保守運用・自動化などの効率化をやってくれる人などなど)

この求める条件の不一致でエンジニア不足が起きているのだと思いますし、この「学習者は多いのにエンジニアが不足している状況」は時間が解決してくれる問題だとしても、いきなり就職して現場に入るのは学習者・企業のお互いにとってリスクが高そうだと感じています。

と言うのも、

  • プログラミングの素質は分かったとしても業務の遂行能力は見極めるのが難しい(プログラムを書けることと仕事をこなせる力は必ずしも一致しない)
  • 試用期間ありで採用したとしても現実問題その数ヶ月で辞めてもらうことは難しい

からです。

 

一行にまとめると

一連の学習を終えた人たちにとって、就職の前にもう1ステップがあった方が良くない?

という感じです。

5.解決案の提案

そこで、現役エンジニアのもとでOJT・インターンシップのように動ける環境を作るのはどうだろう?と考えています。

  •  学習者にとって:現役エンジニアのもとで就職の前のステップとして軽めの案件をこなせる
  •  企業にとって:ちゃんと出来る人がサポートしてくれる状況なので安心して仕事を頼める

6.初めに戻ると

(だいぶ話が飛躍しますが)ここで最初の話題に戻り、先ほどの解決案に書いた環境として、エンジニアになりたい人のためのベーシックインカムハウスを作ろうと思っています。

イメージ図

最初は僕が受けている案件の一部をお手伝いいただくような形が良いかなと思っていますが、最終的にはBIハウスで案件を受けて内部で業務遂行、そこでハウスの運営費や住民の生活費を差し引いて仕事をした人へ報酬が渡るような仕組みを作れたら良いなと思っています。

BIハウス案たたき台

まだすごくざっくりした案ですが下記のように考えています。(変更になる可能性は十分あります。)

  • 家賃・光熱費は無料です
  • 生活費(1.5万)支給します
  • 都心から1時間くらいのところに作りたい
  • 1人1部屋の個室
  • (おそらく期限付きになります)仕事しなくても大丈夫ですが、出来れば勉強または何かしらアウトプットしてもらえるとありがたいです。
  • 現場へ出勤しなくても出来るリモート可能な軽めの仕事をいくつか提供できるよう努力します

7.住人・関係者を募集します

以前ツイートした内容からすでに数人の方からご連絡をいただいていますが、BIハウスに興味を持っていただけた方は

  • 住みたい
  • 仕事を頼みたい
  • 使えそうな物件を提供するよ(もちろん家賃は払います)

という方は是非Twitterまたはこちらからご連絡ください。

最後までご覧くださってありがとうございました。

 

追記 2019/6/24 07:30

公開して一晩ですが

仕事を依頼したいという方:2名
住みたい・関わりたいという方:5名
からご連絡をいただきました。

全員の希望に沿うことは難しいかもしれないですが小規模な状態からスタートできるように調整して行きたいと思っていますので、もう少々お待ちください。

*1:理想を言えば、僕や 僕が仕事を頼んでいるエンジニアさんのように「好きなことをやっていて働いている意識は持っていないけれど、世の中に価値を提供している」=「好きなことで生きていく」みたいな状態の人が増えると良いなーと考えています。

*2:人材の最新動向と将来推計に関する調査結果

世界一辛い「ブート・ジョロキア」を水耕栽培してみる その1

こんにちは、あんどう(@t_andou)です。

辛いものといえばハバネロだと思っていたのですが、2007年に世界一辛い唐辛子として認定されたブート・ジョロキアというものがあります。*1

今回、そのブート・ジョロキアを3本(3株?)買いました。

こちらのお店で購入しました。

www.rakuten.co.jp

育て方

さて、この子達をどうやって育てるかですが、土を使わない「水耕栽培」という育て方があります。

以前、水耕栽培でレタスを育てたことはありますが、レタスだとなんだか面白みに欠けるので、今回は世界一辛いと言われている「ブート・ジョロキア」の苗にしました。

水耕栽培の構想

こちらの記事を参考に水耕栽培のキットを作っていこうかと思います。→最初はホームハイポニカプクプクというキットにしました(理由は後述)

【超初心者向け】ベランダのゴーヤ水耕栽培で100個以上収穫を狙う人に書いた育て方まとめ | ベランダゴーヤ研究所

  • 発泡スチロールの入れ物を使う
  • 根っこに対して空気を送る・水流を作る
  • 液体肥料のハイポニカをあげる
  • 肥料の濃度を適切に保つ → ECメーターというのを作る
  • IoT化する

キットを買いました

前述の設備を自作すると5000~6000円くらいになるようで、初心者向けのホームハイポニカプクプクというキットと値段があまり変わらなかったので、まずはこちらを購入しました。

続く

*1:2019年現在ではさらに記録が更新されているようですが

24時間生放送をし続ける人工知能youtuberを作る その4「顔を作る」

↑今回の成果

こんにちは、あんどう(@t_andou)です。

24時間生放送をし続ける人工知能Youtuberを作る企画、第4回目の記事です。
前回はコメントを取得をして返信をしつづけるというものが完了しました。

今回は少しだけ見た目に手を加えていきます。

続きを読む

オープンソースの電子カルテOpenDolphinとORCAの連携メモ

こんにちは、あんどうです。

最近、お医者さんからの案件で電子カルテを触ってみる機会があったため、オープンソースの電子カルテ「OpenDolphin」とレセコン「ORCA」を試してみたのですが、連携する際に苦戦したので経緯や解決策をメモしておきます。

需要は少ないと思いますが、世の中にはもしかしたら同じ問題にぶつかる人もいらっしゃるかもしれないので、基本的には自分用のメモとして残しておきます。*1

やりたかったこと

ORCAで受付を行った際にOpenDolphinへデータの連携

環境

  • サーバー:ubuntu16.04
  • クライアント:Mac/Win/Linuxどれでも対応できるように
  • ORCA:サーバーにインストール(のちにDockerコンテナ化)
  • OpenDolphin:Dockerで設置

問題

ORCAで患者を登録し、受付が完了した際にOpneDolphinでデータが受信ができなかった。(閉塞となっていた)

原因

おそらく直接的な原因としては、公式で提供されているOpenDolphinのイメージでは5002番のポートが開いていなかったことによってORCA→OpenDolphinのデータ連携が出来ない状態になっていたようです。

解決策

GithubにあったOpenDolphinの設定を変えた上で自前でビルドすることで解決しました。

以下は経緯と手順のメモとなります。

経緯と手順のメモ

ORCA

  • ORCAのインストールはDockerでも公式でもOK
  • DBへのアクセス権は設定する必要がある(postgresql.conf と pg_hba.conf の編集)
  • 医者・患者のデータは登録しておく必要がある

Open Dolphin

  • こちらの参考ページでは操作している端末のIPを指定しているため、公式のDockerイメージだとクライアント経由で通信することになってそう(未調査)
  • サーバー間で通信するためにはport5002で受け付けるようにcustom.propertiesの操作が必要になる
  • しかし、公式のDockerイメージではcustom.propertiesは読み込み専用になっており、操作不可だったためDockerイメージから手を加える必要がある
  • ところが、Githubに置いてあるDockerfileはそのままだとビルドに失敗する
  • エラーを見ていくと、OpenDolphinのビルド時に使っていたFROMイメージ(jboss/wildfly)のバージョンがずれていることが原因のよう
  • そこで、jdkやwildflyのバージョンを下げた(バージョンを下げるのは気乗りしないが、今回はモックアップ作成のために動かすことが目的なのでOK)
  • また、custom.propertiesのコードを変更し、bindIPを0.0.0.0にした(ここはdockerのコンテナに割り当てたIPで良いはず)
  • ここまでで5002で受付はOK。ドルフィン側のDBに登録されていることも確認。しかし、患者のデータはドルフィンのUIに出てこなかった
  • ドルフィンDBを確認したところ、ドルフィンの医療機関コードは1.3.6.1.4.1.9414.70.1に固定であるのに対し 公式のgithubにあるドルフィンイメージ内のcustom.propertiesでは1.3.6.1.4.1.9414.2.1となっていた
  • そこで、このIDを1.3.6.1.4.1.9414.70.1に合わせたところ、動作した

修正後のDockerfileはこんな感じです。
gist.github.com

以上です。

まとめ

OpenDolphinのGithubは4ヶ月前にも更新されているけれど、DockerImageの方はメンテナンスされてないのが問題だったみたい。 今回はバージョンを下げて対応したけれど、本来であれば最新のソースが動くコンテナイメージを作るべき。

参考にしたページ

ゼミの飛翔: ORCAとOpenDolphin

ORCA Project: 日医標準レセプトソフト Ubuntu 16.04 LTS(Xenial Xerus)のインストールドキュメント(HTML版)

受付から送って受付情報が閉塞で表示される - OpenDolphin - シンプルな電カル OpenDolphin の導入を支援します

GitHub - dolphin-dev/OpenDolphin: Open Source EHR Application

*1:お問い合わせいただきましても返答出来かねますのでご了承ください