カタベログ

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

令和の機械学習Azure Hands Onの参加メモ

f:id:tkm1988:20190621204030j:plain
FIXERでのハンズオン風景

講師

  • 山本 和貴
  • 株式会社FIXER データ・サイエンティスト
  • このハンズオンは採用活動の一貫らしいので、joinしたい人は参加するのもあり

メモ

  • これまでの機械学習
    • 全て手作業(データ収集、クレンジングや加工、特徴量設計、モデル設計や構築、評価、デプロイとかとか)
    • 例えるなら洗濯板での洗濯みたいなもの
  • これからの機械学習
    • 大部分を全自動で行うことができる(上で言うところ特徴量設計からデプロイあたり)
    • 例えるなら全自動洗濯機
  • Auto ML + MLOps
    • de:codeではAzure NotebookからGithubにpushしたらAzure Piplineでデプロイまで持っていく感じ
    • 今回は簡単にするためAutoMLに一部置き換えて実現する

感想

  • AzureのUIはAWS触った事あればさほど苦労しなさそう
    • AWSで言えば何なのか?っていう変換部分は覚えなきゃいけないけど
  • Azure AutoMLはDataRobotに似ている
    • とは言え、Azureを活用してる人たち向けだなと思う
    • Azureにロックインしている会社のサイエンティスト向け
    • Azureには学習データの分析ツール(タグクラウド作ってくれたりみたいなの)はないかな?
    • DataRobotの方がより非エンジニア向けな印象
    • そもそもAzureをメインで使う会社を増やさないと盛り上がらなそう
    • AWSGCPもAutoMLには手を出しているのでAzureをあえて使う動機付けが今のとこないイメージ
  • DevOpsツール初めて触った
    • サイロ化している組織では活かせないと思う
    • 統制を効かせい場合はルールを決めるだけに留める方がいいのかな?もう少しここを掘り下げた話を今度は聞いてみたい
    • 好きに使いたいのに権限分離されて、使いたい部署と管理部署でコミュニケーション取りながらパイプライン作るのは非効率的なはず
    • 日本版SOX法とかPCI DSSみたいな規制を前にして旧態依然な開発・運用体制をとる企業は組織体制を変えるところからスタートしないと形だけ、ツール入れただけのなんちゃってDevOpsになる

最後に

あまり肯定的な感想がないけども、実際、これまでデータを軽視、ないしは十分に活用出来ていなかった企業にとってはAutoMLは重要な選択肢になるとは思う。 ただ、なんの経験も、ましたや素養すらもない人間たちが利用すると手に負えないはず。 モデルを一から作れるようなスペシャリストまでは必要ないものの、モデルを本番運用する上では基礎的な統計知識ぐらいは当たり前に持ってるような人は人材として抱えていかないといけないなと改めて感じた。

Spark Meetup Tokyo #1 (Spark+AI Summit 2019)を聴講した話

f:id:tkm1988:20190612182303j:plain
開始前の風景

Spark + AI Summitって?

米国Databricks社が主催するApache Sparkに関する世界有数のカンファレンス。 アメリカではSan Francisco市のMoscone West Convention Center(東京ドーム0.7個分くらい)を会場としている。 今年は5,000人以上世界から参加していて年々参加者が増えている。ちなみに、昨年は4,000人クラスだった。 APACからの参加者も増えていて120名近く今年は参加していて、内20名は日本からの参加者だそう。

いわゆるビッグデータ技術に関するカンファレンスだったけども、近年話題の機械学習との親和性もあって昨年から名前にAIを関するようになった。 元々、Apache SparkにはMLlibがあるので、急に機械学習が使えるようになったとかそういう話ではない。

Spark Meetup Tokyo

Connpassのイベントページからの抜粋。

Spark+AI Summit 2019で発表があったSparkの最新開発状況,ユーザからのユースケース報告,
関連OSSであるKoalas/MLflow/Delta Lakeなどに関する情報をお伝えします.

会場はコワーキングスペース的な雰囲気を醸し出していた。おしゃれ。 この一角だけそういう雰囲気なので浮いていないかというと嘘になる(最上階だしね)。 東京タワーも見えたらよりおしゃれ度が上がったろうに。田町駅に向かって帰ると綺麗に見えるからまぁいいか。

雑感

  • 元が40分とかのセッションをサマって話してもらっている
  • ここで語られた内容が全てという話ではないので注意
  • 公開期間は定かではないが発表の様子はビデオで公開されているので全て知りたい人はそれも合わせて確認した方がいい
  • 英語苦手な自分としては自分が理解することができた内容を改めて日本語で確認できるいい機会だった
  • 以下のような人にはオススメな会だった
    • Apache Sparkについて興味関心がある
    • Apache Sparkについて最新の情報を手軽にキャッチアップしたい
    • 英語苦手
    • 参加費高い
    • 渡航費用も高い
    • それらを会社は払ってくれないから行けもしない
  • Delta LakeはApache SparkでACID特性を持たせられるので発展しそう
  • Pandasの知識をそのまま活かしつつSpark環境で大容量データを高速に分析できるのはアプローチとして良いと思った
    • Koalas開発側はPandasを常に追いかけねばならず、しんどそうだなとも思った
    • 現在、DataFrameやSeriesは30%ほど取り込めており、週次でリリースしているみたいなので取りあえずみんな試してみれば良いと思う
  • MLflowもそうだけど、Databricksって先に広まったもののより良くするフォロワーなイメージ
    • 後発品の方が劣っているとは限らないので悪いイメージを持つ必要性はないと思う(それもまた戦略だし)
    • とはいえ、OSSへの貢献度は高いと思うのでありがたい
    • MLflowも昨年ベータ版だったの1.0がリリースされ、そしてそれがアメリカの有名企業で使われたりと存在感自体は依然としてある

最後に

APACでは三番目のDatabricksのオフィスが日本に出来たので、日本でのこれからどう広まってくかは注目。 日本はまだまだデータの活用が進んでいないので、商機はあるのかもしれない。 製品を売るのもそうだけどOracle DBのように資格ビジネス的な感じでロックインしたエンジニア(サイエンティスト)を増やすのが良いかもしれない。

MacOS(Mojave)でDatabricks koalasを利用しようとしてつまづいた

前提

  • 買ったばかりので開発系ツールがあまり入っていないMac環境
  • GithubのReadMeを読めばおおよそ回避できる

What's "Koalas"?

  • SparkのDataFrameの為にPandasライクなAPIを用意したのがKoalas
  • 米国Databricks社が開発してOSSとして公開した、Python用のフレームワーク
  • 米国Databricks社はApache Sparkを使った製品を開発・提供している(Sparkへのコミットもしている)
  • SparkではPySparkと呼ばれるPythonからSparkを扱うためのツールが用意されている(Spark自体はJVM言語のScalaで開発されている)
  • PySparkでDataFrameを用いる時はSparkが用意するものを使うのが高速
  • 一方、PythonではDataFrameを扱うときは一般的にPandasを用いる
  • PandasのDataFrameの書き方とSparkのDataFrameの書き方は異なり学習コストがかかる

つまづきポイント

Python 3.7.xでのpyarrowのバグを踏んだ

Github(https://github.com/databricks/koalas)のGet Startedに書いてるやんけ。 と言うことで、あらかじめ導入していたpyenvとvirtualenvを使って3.6.8の仮想環境を用意しよう。

If this fails to install the pyarrow dependency, you may want to try installing with Python 3.6.x, as pip install arrow does not work out of the box for 3.7 https://github.com/apache/arrow/issues/1125.

pyenvで3.6.xをインストールしようとするとCのヘッダーファイルがなかった

3.7.2入れた時にもハマりましたが、Xcodeをアップデートした時にまた元に戻った・・・のかな? http://kane-please.hatenablog.com/entry/2018/11/07/001823

cmakeの他にCythonやOpen JDKもいるやんけ

Dependencesに書いてないやん。当たり前なのか?

でも結局

In [1]: import databricks.koalas as ks

In [2]: df = ks.DataFrame({'x':range(3), 'y':['a','b','b'], 'z':['a','b','b']})
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/Users/tkm/.pyenv/versions/3.6.8/envs/mySpark/lib/python3.6/site-packages/pyspark/jars/spark-unsafe_2.12-2.4.2.jar) to method java.nio.Bits.unaligned()
WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
19/04/26 06:52:11 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).

Docker でCentOS用意しよ…。

久しぶりに更新しようと思いました.

こんな写真ばかりをInstagramには上げています.

もしよろしければ,フォローしてください.

https://www.instagram.com/p/BZ5VhUED_k0/

https://www.instagram.com/p/BZ5pjRRDRDF/

 

https://www.instagram.com/p/BZ7lfS1DvUU/

https://www.instagram.com/p/BZ8BC1mD0B9/

https://www.instagram.com/p/BZ8bmiTDfMG/

https://www.instagram.com/p/BZ-NEFIjrkP/

https://www.instagram.com/p/BZ_VII1jEEQ/

https://www.instagram.com/p/BZ5sSBWjpdd/

 

 

技術的な事書きたいけど,何書こうか毎回忘れて会社から帰ってきてしまいます. 

Raspberry Pi Type-Bに,とりあえずArch Linux入れました.

2,3週間ぐらい前にRaspberry Pi買ったんですが,奇跡的に自宅にSDカードを使うことのできる端末がなく,放置してました.
USBメモリでどうにかできないかと試行錯誤してたけど,もう諦めてリーダー買ってきました.

手順をざっくりと書くと以下の通りです.
Raspberry Piの公式ページからArchLinuxのimgファイルをダウンロードする
→SDカードをコンピュータに接続する
→diskutilやdf,mountコマンドでディスク識別子を調べる
→diskutil umount [ディスク識別子]でアンマウントする
→sudo dd if=[imgファイルのパス] of=/dev/rdisk[ディスク識別子にあった番号]
(例:disk2s1ならrdisk2)
→しばし待つと終了メッセージが現れる.
→再マウントされているので,/Volume内のSDカードのでディレクトリに入って正しく書き込まれていることを確認してdiskutil ejectする.
Raspberry PiにSDカードを挿し,電源ON.表面のLEDの内,PWR以下の三つが光ってれば無事に読み込まれている.

細かいことはぐぐって調べてください.

Windows8でBUFFALO BSHSBD04を利用できるようにする方法

FILCO Majestouch MINILA Air JP 68key 茶軸(FFBT68M/NB)を買いました.
Bluetoothのコンパクトなキーボードが欲しかったのです.
冬のボーナスも出たことなので遠慮なく買ってきた訳です.


自分の持ってるデスクトップでも利用できるようにとBurtoothアダプタを買ってきた訳ですが,なんと公式のドライバがWindows8に非対応だというのです.
ワイヤレス生活を満喫するつもりMAXだったのに・・・.


心底がっかりしながらも,藁にもすがる思いでGoogle先生に縋り付きました.
すると.価格.comの口コミにベストアンサーがありました.
その方法というのが,「東芝製ユーティリティソフトを入れることで解決できる」とのこと.
http://www.princeton.co.jp/download/ptm-ubt3s/top.html
ページ中央にあるダウンロードボタンをクリックすると,「v70005.zip」というファイルがダウンロードされる.解凍して「setup.exe」を叩けば終わり.
再起動して「新しい接続の追加」を実行すれば,あとは画面に現れる手順に従えば接続できる.


安物買いの銭失いになるところだった.

リカレントネットワークによる記憶画像の想起 [追記]

ネックであった重み計算でのループ回数の削減を試みました.今までは記憶させるパターンのN次元ベクトルをp個生成するという形でした.今回のは記憶させるパターンのi番目の画素を要素としたp次元ベクトルをN個生成します.こうすることで内積一発で重みが計算できるので1000個記憶させても2個記憶させたときと同じくらいの速度で重みが計算されます.たぶん,これ以上は内積を利用した高速化は無理だと思います.

	#直交する記憶パターンの生成
	for i in xrange(self.__size):
            tmpNDArray = np.zeros(self.__patternNum)
            tmpNDArray[0] = self.__lena[i]
            for k in xrange(1, self.__patternNum):
		tmpNDArray[k] = (1.0 if(rnd.random() > 0.5) else -1.0)
            self.__pattern.append(tmpNDArray)

	self.__weight = np.zeros((self.__size, self.__size))
	for i in xrange(self.__size):
            for j in xrange(i, self.__size):
		if i != j :
                    self.__weight[i][j] = np.dot(self.__pattern[i], (self.__pattern[j]).T) / self.__size
                    self.__weight[j][i] = self.__weight[i][j]

こんな感じで該当部分を書き換えると動くと思います.なんでこんな簡単なことを見落としていたのだろう・・・愚かですね.