Late Riser

Late Riser

ダメ主婦ミルミルのプログラムと道の駅ドライブとリラックマの日々。
プログラム系は情報提供ではなく個人的メモなので、信憑性薄め。

春眠暁をおぼえず。ミルミル、惰眠を貪る。

子供が二人になりまして、ガンダム旦那はガンダムから離れ、
一人ドライブ大好き妻はドライブから離れ、
育児と仕事と家事にてんてこ舞いの日々となりました。
が、ちょっと余裕が出てきたので戻ってきたよ!

とまぁ、ダラダラ書き連ねていくのてよろしくお願いいたします。

以前はドライブブログだったような気もするのですが、
子供が生まれてからはご無沙汰です…行きたい、長距離ドライブ
ドライブまとめ

(↑放置しすぎて画像のリンク切れを起こしてます。そのうち直せれば。)

Amebaでブログを始めよう!

なんだかんだ色々ありましたが、先日、上の娘(ユヅ)が保育園を卒園しました。

妊娠初期はつわりで会議室で倒れこみまくり(中間管理職特権w)

妊娠中期は胎児供水だ入院だ羊水検査だシャント術だ生きるだ死ぬだと大騒ぎになり

妊娠後期は某ゲームの追い込み時期を職種リーダー自ら放り出し産休育休で

産んだら産んだで母の腹の上でしか寝ないわ、

ド級のウルトラハイパー偏食だわ、気難しいわでなかなか大変だった娘が、

とうとう保育園を卒園しました!!!

 

まぁ仕事上も、育休復帰したら干されるわ昇格の話も完全に掻き消えてるし、

残業三昧の部署に様変わりしてるし、通いようもない遠くの開発センターに飛ばされかけるし

なんだったらパワハラ野郎のせいで古参が軒並みいなくなってるしwwww

で、転職したら私が癌だのなんだのとwwwww

そんな怒涛の生活を呼び込んでくれた上の娘が、とうとう小学生に・・・!

 

しかもこの数年で「しっかりしてるしオシャレでやさしいお姉ちゃん」キャラを確立しての卒園です。

母本人どころか、周りも担任もびっくりの成長ぶり。

一体どうした。

反動で反抗期に凄いことになるとかホントにやめてよ?

 

↑卒園式中。めっちゃ号泣してた。

泣いてんの、ユヅと担任3人と保護者の方数名だけ。

(その割に、式が終わったら何の余韻も感慨もなく、アッサリ帰りましたけど)

 

まぁ、3月末まで通うんでね。

下の娘もいるから少なくともあと3年は、まだまだ行く機会もあるし。

 

そして、小学校入学前の子を持つ親には新たな試練が。

・・・算数セット、名入れサービスないの?老眼にはツライ!

 

そんな彼女は、さすがにデジタルネイティブ世代。

「ママの本、おもしろーい」だそうで。

絶対読めてないやろ、それ。

 

誰に似たのか、ロボット教室に通いたいそうです。

お母さんも通いたいです。

2019 TensorFlow Dev Summit をおさらい
https://developers-jp.googleblog.com/2019/03/2019-tensorflow-dev-summit.html?linkId=64669426

なぜGCPのプレスリリースの日本語はこうも回りくどいのか。

去る某日、2019 TensorFlow Dev Summit(3回目)がカリフォルニアのサニーベール(どこか知らん)でありまして、
それはそれはウェーイ!って盛り上がり、実際 約1,000 人の機械学習エンジニアやリサーチャーが参加し、
さらに 1 万人の方がライブストリームで視聴したんだそうな。
当然私は視聴していません。英語だし。

で、簡単に概略をメモ。

・TensorFlow 2.0 のアルファ版をリリースしたよ!
某Udemyの講師の方々曰はく、「機械学習周りはしょっちゅう変わる」だそうで。
で、デベロッパーや研究者がTensorFlowの強力な機能を使えるようになり、
MLの構築が今まで以上に簡単にやりやすくなったんだと。
(…簡単に…簡単に…???)

で、例によってオープンソースですので、そっち業界ともコラボを進め、
さらに次世代の新規ユーザーを訓練するために、O’Reilly Media、Udacity、Coursera の deeplearning.ai、fast.ai と
新たにコミュニティ パートナーシップを結んで教育方向にも力を入れるとか
(きっとお高いんでしょうな…)


・API コンポーネントの tf.keras との統合を強化し、高レベルAPIを提供するよ!
この辺は今まで通りTensorFlowとkerasのセットということなんだけど、
「データの取り込み、変換、モデルの構築、トレーニング、保存からデプロイまでをより簡単に行えるようになります。」
とのこと。

・TensorFlow Datasets もリリースしました!
よく使われる ML データセットのコレクションを TensorFlow で簡単に使えるようにしたものがリリースされたとか。
・・・アヤメの分類ばっかやってる場合じゃないわけですね。

・公式サイトでは1.x コードの 2.0 への移行をサポートするため、変換・移行ツールとドキュメントを提供しているよ。
TensorFlow 2.0 のアルファ版へ移行しよう!

・TensorFlow では、8 台の V100 で行う学習速度が昨年と比べて 2 倍以上高速化されました。
Cloud TPU v2 でのパフォーマンスは 1.6 倍に、
Intel MKL アクセラレーションによる推論速度は 3 倍以上になりました。
(うん、わからん。が、おそらくすごい事なんでしょう。)



・TensorFlow エコシステムには便利なアドオンがありますよ!
    ・TensorFlow Federated:
      今回のイベントで発表されたライブラリで、
      デバイス側のデータを学習に活用するフェデレーション ラーニングを実行

   ・TensorFlow Privacy:
      プライバシーが異なるモデルをトレーニングする際に役立つツールを含む開発中のライブラリ

   ・TensorFlow Probability:
      ML モデルで確率的手法を使い、不確定性を扱う予測や専門知識を組み込むためのライブラリ

   ・TensorFlow Agents

      TensorFlow 2.0 で強化学習を行うためのライブラリ

   ・テキスト処理やシーケンス処理の向上:
      Unicode テキストや形状が統一されていないデータ向けの新しい RaggedTensor 型のサポートなど、

   ・Mesh TensorFlow: 

      並列技術を使って大規模モデルの構築と学習を行う研究者向けの強力なライブラリ

   ・例

    DeepMind の Sonnet: 研究所が TensorFlow のモジュールと拡張可能フレームワーク上に

    独自のライブラリを構築した例

(薄くしかわからん。もうちょっと勉強を進めてから本件には挑もうと思う。)


・本番環境で TensorFlow を使う
TensorFlow Extended(TFX)を使えば、機械学習のライフサイクル全体を管理できるんだけど、
とうとうオーケストレーションがサポートされましたーーーー!(超重要!)
これによって、各コンポーネントを 1 つにまとめ、統合されたエンドツーエンド プラットフォームを利用できるように!
外部のオーケストレータもサポートされており、TFX コンポーネントをメタデータ ストアと統合できる。
このメタデータ ストアは、実行されるすべてのコンポーネントや、入力された学習データ、生成されたモデル等の記録を管理したり
実験の記録やモデルの比較といった高度な機能を使ってそれはもう、本番環境のユースケースを大きく改善できちゃう。
あと、TFX は複数のコンポーネント ライブラリで構成されてるんだけど、コンポーネントの新機能もどんどん追加しているよ。
(GCPの設計思想として、マイクロサービス&統合管理てのがあって、
外部サービスもGCPアーキテクトも一括で管理するのがいいよね、っていう。
この思想はStackDriverなんかでも共通で、とにかく便利だと思う。)



・モバイルや IoT で TensorFlow を使う
TensorFlow Lite は、モバイル システムや組み込みシステムでモデルを実行するためのソリューションです。
世界中で爆発的に広がって 20 億台以上のモバイル端末で実行されており、次世代のオンデバイス ML を主導しています。

TensorFlow Lite は、テキストの予測生成、イメージの分類、物体検知、音声認識、テキスト読み上げや音声の書き起こし、動画セグメンテーション、エッジ検出などのユースケースに活用されています。


・JavaScript で TensorFlow を使う
JavaScript デベロッパーが ML を使えるようにするのが、TensorFlow.js 。(Ver1.0)
TensorFlow.js は、デプロイに使用するだけではなく、ブラウザや Node.js のサポートを使用して、
直接 JavaScript で機械学習モデルの構築やトレーニングに使うこともできます。
このリリースに含まれる主な機能には、大幅なパフォーマンスの改善(MobileNet v1 のブラウザでの推論は、昨年に比べて 9 倍高速化)、
すぐにアプリケーションに組み込めるたくさんの新しいモデル、JavaScript が動作するプラットフォームの拡大などがあります。
AirBnb や Uber をはじめとする多くの企業が、本番環境で TensorFlow.js を使ってるし、
コミュニティもメッチャもりあがってるらしいよ!


(こんなにJavaScript嫌いなのに、どうも逃げれない雰囲気になってきてるよね)


・Swift で TensorFlow を使う
新しい Swift 用 TensorFlow パッケージの進捗について、バージョン 0.2 をリリースしていますので、
この新しい ML パラダイムを試し、向上したユーザビリティを確認することができます。
(Swiftのことはさっぱりだ)


<<機械学習進捗について>>
上記については、複層パーセプトロンで脳が死んでいる私にとっては
いまひとつ未到達のジャンルですが、なんとかまだがんばってます。
Udemyの講座もやっとKerasとTensorFlowの章に突っ込んだんだぜ。

「まぁ、プレーンのPythonで戦えるのはこの辺りまでなので、これからはライブラリ使います」
の安堵感と
「このあたりの数値決めは、経験則からくるカンですので説明は割愛します」
の絶望感wwww

Onairがおもしろかったので、メモがてら。

気になる人はあやふやなここじゃなくて、本家を見てね。

PDFも動画も公開されてるしデモもあるよ!!!

 

2019/02/21 GoogleCloudで実践するマイクロサービスアーキテクチャ

https://cloudplatformonline.com/onair-japan-past-webinars.html#past-video

 

で、内容。今回ほんとに勉強になったなぁ・・・。

 

◆時代はモノリスからマイクロサービスですよ。

モノリス:フロントエンド・バックエンド・データベースの三層構造アーキテクチャ
  いわゆる、よくある構造の奴。LAMPとかね。
   ・デメリット:スモールスタートにはいいんだけど、大きくなると、
   運用ややこしいし、テスト大変だし、スケーリングしづらいし、

   全体に波及するから変更容易性が低くなる。
 

マイクロサービス:サービスごとにアプリケーションを独立させて、それぞれを疎結合させる
  APIとかでやり取りさせて、必要機能ごとにデプロイしたり連携したり管理する最近のやつ
  ●メリット
   ・機能追加や新機能の導入が楽
   ・スケールアウト・可用性・耐障害性向上
   ・DevOps/アジャイルとの親和性→開発スピードUP
  ●デメリット
   ・サービスディスカバリー(どこで何のサービス動いてるか)
   ・オートスケーリング
   ・トラフィックコントロール(どこを何のプロトコルが動いてるか)
   ・障害の分離(Fault Isolation)
   ・可観測性(Observability)
   ・サービス間の認証認可
     →これらのデメリットにGCPは有効だよ!


=>GKEで解決できちゃう項目が下記
(GKEとはKubarnetesのマネージドサービスですよ。詳しいことは別途)
・サービスディスカバリー(どこで何のサービス動いてるか)
・オートスケーリング

詳しく言うと、GKEの↓のような機能で解決!
  ●Auto-everithin(機能名ではなく出演者の造語)
    ・Auto-reoair:パフォーマンスに問題のあるNodesを自動リプレイス
    ・Auto-upgrade:しょっちゅうUPしてうっとおしいk8sだけど、

               GKE上のは常に最新に自動更新するよ!
    ・Auto-scale:需要に応じてNodeを自動的に調整するよ
    ・Auto-Provision(Beta):ClusterAutoscalarの一部として動作し、

                    適切なNodePoolを作ったり消したりするよ
  ●RegionalCluster
   ・k8sのマスター一個じゃ心もとないから同一リージョンの別ゾーン3つに複製して、99.95のSLAを出してるよ
   ・マスター側のメンテがあっても多ゾーンに複製してるからサービス断なしだよ!
  ●ReionalPersistentDisk
   ・セカンダリのゾーンのディスクに対してデータをミラーリングするよ。
   ・ゾーンに障害があった場合は別のゾーンに対比してミラーリングしてるディスクをアタッチするよ
  ●Node Auto-Provisioning
   ・NAPはGKEのスケーリング機能と一緒に動作して、workloadに最適なインタ素を使って新しいNodePoolを勝手にアップグレードしてくれるよ
  ●PrivateCluster
   ・PublicIPを持たないNodeを利用可能にしてセキュリティ強化!
  ●ContainerNativeLoadbalancing ←version依存あり
   ・NEGを使って、HTTPSロードバランサーから直接PODのIPを参照(doubleHopを解決!)
 

サービスメッシュ=Istioで解決するのか下記4項目
   ・トラフィックコントロール(どこを何のプロトコルが動いてるか)
   ・障害の分離(Fault Isolation)
   ・可観測性(Observability)
   ・サービス間の認証認可

ほら!デメリット全部解決できるじゃん!


まず、サービスメッシュとは?
  ●サービスメッシュ:マイクロサービス環境において、サービスディスカバリ、

               トラフィックコントロール、認証認可(セキュリティ)、

               メトリクス収集(ログ等の可観測性)などの機能を担う技術やソフトウェア
  ↑アプリやサービスごとにそれぞれこの機能を入れるのは大変なので、システム全体にこれを入れる。

で、GoogleさんとIBMが中心に作ってるのがIstioさん。(GCP:Istio on GKE)←ベータ版
  ・サイドカーといわれるネットワークプロキシを使うことで機能を提供しているよ。
  ・IstioさんとのサイドカーがEnvoy(えんぼい)さん
  ・GCP:Istio on GKEとして、GKEのアドオンとしてつかえるから超簡単よ。
  ・自動でcontorolplaneをアップグレードするし、StackDriverにログもながしてくれるよ
まぁ、挙動詳細は直接Onair見てもらうとして。

 

●Istioのアーキテクチャ
 ・Pilot:Envoyと連携してサービス間の通信えおせいぎょ(ルーティングとか)
 ・Envoy:ネットワークプロキシ
 ・Mixier:ポリシー管理、テレメトリサービスとの連携。スタックドライバーやサードパーティーツールにログ送ったり。
 ・Citadel(シタデル):サービス間の相互TLSや証明書発行(要はCA局)

 

 

 

なんかホンマに楽しいな。

できればみんな、動画を見てください!まじでわかりやすいから。

「5件連続で公式と違うことを書いたら公式から外す」
ってなんじゃらほい。
このジャンル(ネット・技術)で技術は中心だけど
他の事もだらだら書きたいと思うからこそのブログちゃうんかと。
違うことも書かせろよ。
おれ、まだドライブコンテンツも捨ててないぞ(行けてないけど!行けてないけど!!)

・・・そんな、ネット技術特化型アウトプット先にしたいなら、
普通Qiitaに書きますやん?
(自信なさすぎて書かないけど)

ということで、技術4、雑記1で調整していかなアカンかな、と。
(そんなに書くことないもんな、技術w)

ところで、機械学習を進めるにつれ、
ブログ等にアウトプットしようと思うとどうにも図を書く必要性に迫られてきた。

PCはタッチパネルだし、タッチペンも持ってるし、多少の絵心もある。
つーことであとは画像ソフトなんだけど、
無料で簡単でサクサク使えるやつはないものだろうか。
ペイントかな、やっぱり…

……(調べてる)……

PhotoSHOPとイラストツールを両方使いたいけど
使用方法をツールごとに学びたくないし、
金を払いたくない私のような人のためのソフトを発見しました。

gimp
https://docs.gimp.org/2.10/ja/

(そういや10年ぐらい前にもこれ触りかけてたな )

自称絵心のあるブログはUPされるのかされないのか、
そもそも機械学習のコンテンツは増えるのかwww

単純パーセプトロンですら碌に理解できないのに!!!(笑)
分かるけど、さっぱりわからん!
概念はわかったが、さっぱりわからんという事がよく分かった。
(ブログにする場合、INputとかグラフ生成の話は絵で描かんとなんともならん。)

Pythonの勉強            
            
まぁ、多言語利用してるプログラマですのでね、気になったところだけ。            
            
・Python2系とPython3系ではいろいろ違うので必ず3系でよろしく。2系はそろそろ朽ちるかと…            
(まぁAnacondaで一緒にいれちゃうんだけど)            
            
・拡張子は.py            
・コマンドの最後に;がいらない。(書きたい)            
・;は文字の区切りコード(なんでやねん。つーかこんな一行複数命令コード書くか?)            
   例:print "Hello";print "world"            
・コメントは#            
・文字コードはUTF-8にしとけばいいんちゃうかな      
   # coding: UTF-8         

  
・ネストでプログラムを制御する            
・トリプルクオーテーションで囲めばエスケープシーケンスを省略できる            
・大文字小文字を区別する            

・変数名 = オブジェクト            
・変数名:1文字目は英文字かアンダーバー(_)            
・変数名:2文字目以降は英数文字、アンダーバー            
・変数名:予約語は使用できない            
・変数名:大文字と小文字は区別される            
・オブジェクトは真偽に分類できる            
   「True」は数値の「1」、「False」は数値の「0」と同じように扱う            
   数値の「0」や空文字は偽(false)、それ以外は真(true)、Nullも偽            
   空のタプル()、空のリスト[]、空のディクショナリ{}は偽(false)            
   NoneType型の「None」は偽(false)            
   オブジェクトの比較            
     str1 == str2 #valueの比較            
     str1 is str2 #オブジェクトの比較 逆は「is not」            
            
・型は緩い            
・if文            
   if 条件式1:        
      条件式1が真の時に実行する処理1    
      条件式1が真の時に実行する処理2    
   elif 条件式2:        
      条件式2が真の時に実行する処理1    
   else:        
      どれにも適合しない場合の処理    
   print x #ifを抜けた後の処理        

            
・配列構造が3つ(厳密にいうと、ディクショナリ型はMAP型)            
・リスト。ゆるいつくり。数値オブジェクトと文字列オブジェクトが入ってもいいし、リストオブジェクトを入れてもいい            
   list =[オブジェクト1, オブジェクト2, ...]            
   list = [10, [20, 16], [32, 34], 18]            
   value1 = list[0]            
   ・インデックスは0から(逆説からのアクセスは「-1」から使える)            
   ・値が被る場合は消し込まれる            
   ・スライス使える            
      リストオブジェクト[開始インデックス:終了インデックス]            
   ・追加、削除、変更等々色々メソッドが豊富で変更が柔軟(VBAしね)            
            
・タプル:ほとんどリストと一緒だが、あとから変更できない            
   tuple = (オブジェクト1, オブジェクト2, ...)            
   tuple = オブジェクト1, オブジェクト2,  #とも書ける。ややこしいな。            
   ※要素が1つの時はtuple = (オブジェクト1, )と記述            
            
・ディクショナリ:要は連想配列            
   dict = {キー1:値1, キー2:値2, ...}            
   value =  dict["key"]            
   辞書では要素に順番は無いので、内部でどう並ぶかはわからない            
   ・存在しないkeyを使うとKeyErrorになる            
   ・キーに数値や文字列を使用できる            
   {1:"A", 2:"B"}            
   {"JP":u"日本", "CA":u"カナダ"}            
   {(50, 100):"test", (120, 150):"test2"}            
   ・追加、削除、変更等々色々メソッドが豊富で変更が柔軟(VBAしね)            
            
・while文(elseは省略可    
        
   while 条件式:            
      条件式が真の時に実行する処理1            
   else:            
      条件式が偽の時に実行する処理1(whileを抜けるときに行う)            
               
   while抜けた後に実行する処理            

            
・for文            
   for 変数 in オブジェクト:            
      実行する処理1            
   else:            
      forを抜けるときに            
            
   for抜けた後に実行する処理    
        
            
   ・色々回し方            
      for num in [4, 3, 12]:            
      for str in "Hello":            
      for var in range(0, 10):            
      for value in list1:            
      for key in range(len(list1)):            
      for key, value in enumerate(list1):            
            
・2つのリストを同時ループするとき            
   for key in range(len(list1)):            
      print("リスト1:" + list1[key] + ", リスト2:" + list2[key])            

   を↓に置き換えれる(↑二つともが必ずあるとは限らない)            

   for value1, value2 in zip(list1, list2):            
      print("リスト1:" + value1 + ", リスト2:" + value2)            
            
   ※zipの引数は、2個だけに限定されていない。3つでも4つでも(便利!!!)    

 

 

思ってたより、使いやすいかも(長年逃げ続けてきたのに)