Jack of all trades

master of none. 多芸は無芸を地で行く、自作自演何でも屋。

オカヤマ コンピュータサイエンス ラボについて振り返る

f:id:sadynitro:20181126213830p:plain

オカヤマ コンピュータサイエンス ラボ はじめました

ブログでは全然触れてないけど、今年の夏頃にオカヤマ コンピュータサイエンス ラボというコミュニティ(勉強会)を立ち上げました。

オカヤマ コンピュータサイエンス ラボ

コミュニティのモチベーションとしては「コンピュータサイエンス分野の話をしたい・聞きたいけど、そういう場が無いから作った」というのが一番です。

あとは同じように燻ってる人が居たらとても勿体ないなと思ったので、情報発信・共有の場を作れたら、と思っています。

ボチボチ活動してるのに全然振り返ることもなくやっていてしまったので、今さらながら今年の活動をまとめておこうと思います。

オカヤマ コンピュータサイエンス ラボ Vol.1 (キックオフイベント)

8/18にキックオフイベントとして、オカヤマ コンピュータサイエンス ラボ Vol.1を開催しました。

connpass.com

とりあえず1回目ということで、特にジャンル限定せず、コンピュータサイエンス絡みの話であれば何でもOKということでセッション組みました。急な誘いにもかかわらず発表してくれた小西さん、鳥羽さんに感謝。セッションの内容としては、

というラインナップで、いい感じに散らかったセッション構成になって1回目としては非常に良かったと思います。大体のレベル感とか何でもアリ感が伝わってると嬉しい。Azure Machine Learningについては、サービス開始当初から興味があって、幾つか実験試しながら情報をまとめたりしていたので、この機にちゃんとした勉強会をやるのも良いかなあと思いました。

Azure Machine Learning 勉強会 in Okayama

"この機にちゃんとした勉強会をやるのも良いかなあと思いました。"
からの、Azure Machine Learning 勉強会。

11/17にOITECとの共催でAzure Machine Learning 勉強会 in Okayamaを開催しました。

connpass.com

岡山でMS関連のテクノロジーといえばOITECでしょう!ということで、きよくらさんにお願いして共催で勉強会やることに。ちょっとしたハンズオン形式でやることを考えていたので、実験の内容と手順を固めてOITECスタッフの方々に事前に素振りしていただき、当日のハンズオンフォローをお願いしました。OITECの皆様、ご多忙の折にありがとうございましたm( )m

ハンズオン以外については、Azure Machine Learningの概要を押さえつつ、肝であるモジュールについて可能な限り説明するようにしました。Azure Machine LearningではGUIで各種モジュール(データの読み込み・加工、学習アルゴリズム、学習済みモデルの評価など)をつなぎ合わせて実験を構成することで、簡単に機械学習の実験を実施&Webサービスとして展開できるのが特徴です。が、それらのモジュールで何ができるかわからないとどうしようもない(サンプル動かしてふ~んってなるやつ)ので、まずはモジュールの内容とそれらのつなぎ方を説明した方が良いだろうという意図です。

実際に勉強会としてやってみると、やはり具体的な実例やこれを使って何をするかというアイデアがないと中々ピンとこない、という感じでした。あとは実運用面で、まずデータの収集やクレンジングが難しいよね、とか日々新しいデータを収集して再学習させる仕組みを構築しようとすると別のサービスと組み合わせる必要がある(Azure Data Factoryや自前のシステムへの組み込み)など、踏み込んだ話をするには別の切り口が必要となり、1回の勉強会でカバーできる範囲としては中々厳しいなぁと思いました。

今後の活動

Azure Machine Learning勉強会の反省を踏まえて、統計や機械学習の基礎に関する内容を取り扱うのが良いのではと考えているので、次の勉強会はそういった内容で実施すると思います(何につけても前提知識がある方が理解しやすいはず、という思惑)

あんまり間を空けすぎないようにと思ってはいるんですが、諸事情により最速でも3月開催になりそうですが、忘れ去れらないようにできるだけ早めに動きます。

それでは、次回オカヤマ コンピュータサイエンス ラボ Vol.2でお会いしましょう。ごきげんよう

Azure Machine Learningの無償版を利用する (2018.10.22現在)

Microsoft Azureの機械学習サービスであるAzure Machine Learning(AzureML)には無料で使用可能なGuest WorkspaceとFree Workspaceが存在します。*1

Guest Workspaceは8時間の試用版で、Microsoftアカウントが無くても使用可能です。AzureMLの実験で使用可能なサンプルデータセットやビルトインの学習アルゴリズムモジュールを気軽に試すことができます。

Free WorkspaceはMicrosoftアカウントが必要ですが、月額は無料で、実験の機能としては無制限です。使用可能ストレージ容量が10GBに制限されていたり、学習済みモデルをWeb APIとして発行した際の制限等があります。

AzureMLのWorkspaceを利用するためには、まず以下のURLにアクセスします。

azure.microsoft.com

AzureML Studioのページが開くので、「今すぐご利用ください」をクリック。

f:id:sadynitro:20181022204407p:plain

WorkSpaceの選択画面が開きます。ここではFree Workspaceを選択。

f:id:sadynitro:20181022204625p:plain

Microsoftアカウントでのサインイン画面を挟んで、Azure ML Studioの実験画面が開きます。

f:id:sadynitro:20181022204907p:plain

あとは自由にデータとモジュールを組み合わせて機械学習の実験を実行するだけです。

Enjoy!

*1:有償版はStandard Workspaceで月額9.99ドル。SLAサポート、任意のAzure Storeageが使用可、など企業向けの機能・性能を有しています

オープンセミナー2018@岡山に参加しました

f:id:sadynitro:20180512100127j:plain

今年は参加できました(去年は参加できず)

以下connpassのイベントページ。 当日のスライドが公開されているのでそちらを見るだけでも参考になるかも。 oso.connpass.com

以下、今年のテーマである「エンジニアの生存戦略と働き方」に沿った全体的な所感とまとめを。

アウトプットと認知

情報発信、自分を売り込むことの重要性を改めて感じました。

単純に有名になりたいとかそういうことでなく「これができる人」「これが頼める人」として知られることによって初めて自分の仕事・ポジションを作り出すことができるのだと思いました。

また、伊藤淳一さんが「いざという時にそれを証明できるか」とおっしゃっていたのが印象的で「○○の人」として知られていても、いざ依頼を受けた時にきちんとそれを実行できなければ意味をなさないということに改めて気づかされました。十分な鍛錬と覚悟が必要。

自分の強みとやりたいこと

伊藤淳一さんの「ついこだわってしまう、仕事か趣味かわからない、適当にやる人を許せないこと」湊川あいさんの「泣くほど悔しいことは本当にやりたいこと」がクロスオーバーして、最終的には論理的な部分でなく、感情的なこだわりや情熱がその人を突き動かす原動力であり、そのまま強みになっている(なっていく)ものだと感じました。

「泣いてもやめられないほど好きなものがあるってのはさ きっとすごいことなんだぜ」スピカ ~羽海野チカ初期短編集~ より

英語ができることの意味

英語が出来て損はないというのは言わずもがなですが(得られる情報量、情報発信、コミュニケーション etc…)

GitHubの池田尚史さんが「英語ができるようになるだけでリーチできる範囲が広がる」とおっしゃっていて、これもまた一つの生存戦略だと感じました。

エンジニアとしてのスキルセットが全世界である程度共通のものならば、言語の壁を超えるだけで仕事や所属の選択肢は大幅に広がる。あたりまえだけどその視点で英語スキルについて考えることがあまりなかったので、また少し視野が広がった気がします。

~まとめはココまで

毎度おなじみ、Ryoutei 座・スタジアムでの懇親会では、新たなる飛び道具を拝見することができて、岡山もまだまだ引き出しあるんだなぁって思いました。

懇親会はライブ感が命なのでここで詳しく書くことはしません。ご都合がつく方はぜひ自ら参加することをおススメして本エントリーを締めさせていただきます。

最後に、運営スタッフ、登壇者の方々を中心に、OSO2018に関わったすべての方々に感謝を。来年もよろしくお願い致します。

SQL Server 2017 CTP2.0上でChainerを使用する

先日のエントリで、SQL Server 2017 CTP2.0のMachine Leaning ServicesでPythonのコードを実行する手順を紹介しました。

sadynitro.hatenablog.jp

SQL Server Management Studioで外部スクリプトとしてPythonのコードを実行し、さらにGoogleの提供するオープンソース機械学習ライブラリであるTensorFlow*1をインストールしてPythonのコードで使用するところまで実践しました。

github.com

今回はTensorFlowを使ってさらに…と思っていたんですが、最近の興味と先日の de:code のセッション内容もあってChainerを使ったあれこれを実践してみる方向に切り替えました。

1. Chainerのインストー

ChainerはPreferred Networksが提供するオープンソースの深層学習フレームワークです。最近IntelMicrosoftとの協業でさらに注目度は上がっているように思います。

github.com

先のエントリでTensorFlowをインストールした時と同じく、SQL ServerPython Serviceのフォルダに移動してpipによるインストールを試みます。

cd C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\Scripts
pip install --ignore-installed --upgrade chainer

2. Chainerの動作確認

とりあえずSSMS上でChainerを利用するPythonコードを書いてちゃんと動作することを確認します。

execute sp_execute_external_script
@language = N'Python',
@script = N'
import numpy as np
import chainer.functions as cf

x = np.arange(-1, 4, 2).astype(''f'')
y = cf.sigmoid(x).data

print(x)
print(y)
'

numpy.arangeで適当に生成した配列に対してシグモイド関数を適用するだけのコードです。

f:id:sadynitro:20170614232359p:plain

どうやらちゃんと動いているようです。

3. 外部スクリプトに対するInput・Outputを使用する

SQL Serverのテーブルに対して、pythonのコードにデータを読み込む、pythonのコードからデータを書き込む操作がよくわからなかったのですが、 ちょっと前にポストされた以下の記事に書いてあったのでこれに沿って試してみます。

blogs.msdn.microsoft.com

サンプルデータとしてRatingという名前のテーブルを作りました。

f:id:sadynitro:20170616201606p:plain

お店の口コミサイトのデータみたいなイメージですね。

では、このテーブルのデータをpythonのコードで読み込むために以下のコードを実行します。

execute sp_execute_external_script
  @language = N'Python'
 ,@script = N'
print(InputDataSet)
'
,@input_data_1 = N'SELECT * FROM Rating'
GO

すると以下のようなエラーメッセージが。

メッセージ 39004、レベル 16、状態 20、行 1
'sp_execute_external_script' に HRESULT 0x80004004 を指定して実行中に、'Python' スクリプト エラーが発生しました。
メッセージ 39019、レベル 16、状態 1、行 1
外部スクリプトエラーが発生しました: 
Traceback (most recent call last):
  File "<string>", line 2, in <module>
  File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py", line 522, in rx_sql_satellite_pool_call
    exec(inputfile.read())
  File "<string>", line 3, in <module>
  File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py", line 474, in rx_sql_satellite_call
    rx_native_call("SqlSatelliteCall", params)
  File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py", line 19, in rx_native_call
    ret = px_call(functionname, params)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 0: invalid start byte

Invalid BXL stream

文字コード絡みのエラーの様なので、日本語データの入った列を除外してみます。

execute sp_execute_external_script
  @language = N'Python'
 ,@script = N'
print(InputDataSet)
'
,@input_data_1 = N'SELECT UserId, ShopId, Rating FROM Rating'
GO

今度はうまくいったようです。テーブルのデータを読み込んで標準出力に出力できています。

f:id:sadynitro:20170616202126p:plain

上記のエラーについては現状解決できていません。どなたかご存じであればご教示いただけると幸い…。

4. SQL Server上のテーブルデータをInputとしてChainerで処理する

とりあえずSQL Serverのテーブルデータを扱えることを確認できたので、これをInputとしてChainerで処理させるコードを試してみます。 InputDataを抽出するクエリでShopId=2のRatingに絞り込み、その平均値をChainerで計算しています。

execute sp_execute_external_script
  @language = N'Python'
 ,@script = N'
import numpy as np
import chainer.functions as cf

r = np.array(InputDataSet.Rating).astype(''f'')

result = cf.average(r)

print(result.data)
'
,@input_data_1 = N'SELECT Rating FROM Rating WHERE ShopId = 2'
GO

f:id:sadynitro:20170616205732p:plain

無事に算出されました。ShopId=2のお店の平均評価は約2.86となっています。

まとめ

SQL Server 2017 CTP2.0上でChainerが実行できることを確認できました。
また、SQL Serverのテーブルデータを利用した処理を記述することもできたので、SQL Serverに蓄積したデータを学習データとして機械学習のモデル構築とか、 もしくは学習済みモデルを搭載してSQL Serverのデータから予測をしたり、分類したりすることもできそうです。

*1:公式サイトでは「for Machine Intelligence」と表現されています。読みは「テンサーフロー」中の人が言ってるんだから間違いない。異論は認めますん。

SQL Server 2017 CTP2.0 on Ubuntu16.04 を Ruby on Railsで利用する

1. SQL Server 2017 CTP2.0 を Ubuntu16.04にインストー

SQL Server 2017 CTP2.0はLinux上でも動作するということで、早速以下のサイトに従ってUbuntu16.04上にインストールしてみました。

Install SQL Server on Ubuntu | Microsoft Docs

※注意:サイトにも記載されていますが、SQL Server on linuxのインストールにはメインメモリが3.25GB以上必要です。不足している場合はインストール時のチェックで弾かれてインストールが実行できません。

無事にインストール完了。

systemctl status mssql-server

を実行すると、サービスが実行中になっていることを確認できます。

f:id:sadynitro:20170429072041p:plain

2. SQL Server Management Studio (SSMS) から接続する

もちろんWindowsクライアント上のSSMSから接続することもできます。

https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-develop-use-ssms

SSMSのバージョンはv17.0 RC1(ダウンロードのページで「SQL Server Management Studio - リリース候補」と書かれている方)を使用します(少なくともSQL Server 2014のSSMSだと互換性の問題によるエラーが発生しました。SQL Server 2016のSSMSは未確認。)

Download SQL Server Management Studio (SSMS) | Microsoft Docs

f:id:sadynitro:20170429074326p:plain

接続できました。

3. Ruby on Rails アプリケーションから利用する

単純にUbuntu上で稼働しているのを確認するだけだと面白くないので、何かしらのアプリケーションから利用したいと思います。

on LinuxSQL Serverを利用したアプリケーション開発の為の手順・サンプルコードも既に用意されているので、それに沿って作っていきます。

Ruby Ubuntu

様々な言語に対応したサンプルが用意されていますが、今回はRuby(Ruby on Rails)を選択します。

SSMSを確認するとRailsアプリケーション用のDBが出来上がっています。

f:id:sadynitro:20170429083144p:plain

これで準備完了。rails sを実行します。

rails s -b 0.0.0.0 -p 3000

ブラウザでアプリが実行されていることを確認できます。

f:id:sadynitro:20170429081746p:plain

これだけだとDBサーバーを利用している感が無いので、scaffoldで適当なユーザー管理(CRUD)の仕組みを生成します。

  • モデル名: user
  • カラム
    • name: string
    • age: integer
rails generate scaffold user name:string age:integer

scaffoldの実行が終わったらrake db:migrateを実行。

SSMSからDBの中身を確認するとUsersテーブルが生成されていることを確認できます。

f:id:sadynitro:20170429083742p:plain

rails s を実行して、ブラウザからアクセスするとユーザー管理ページが開きます。

f:id:sadynitro:20170429084041p:plain

適当にユーザーを登録。

f:id:sadynitro:20170429084115p:plain

f:id:sadynitro:20170429084120p:plain

SSMSを確認すると、ちゃんとUsersテーブルにレコードが追加されています。

f:id:sadynitro:20170429084202p:plain

まとめ

公式サイトの手順に従って、SQL Server 2017 CTP2.0をサクッとインストールできました。さらに、用意されたサンプルでサックリRuby on Railsから利用することができました。

何もかもサクサク。

ASP.NET Coreだけでなく、Linux上で動作する様々なアプリケーションフレームワークからSQL Serverが利用される日が来るかもしれませんね。 f:id:sadynitro:20170429084825p:plain