数値解析日記

数値解析関係のネタ帳。C++,pythonなど

kvをdocker化すると何が嬉しいか?

こんなものを作ってみました

github.com

GitHubのコンテナレジストリを使ってみたかったので kvをdocker化してみました。
知見と問題点をまとめます。

www.publickey1.jp

dockerとは?

www.docker.com

解説記事は探せばたくさんあるのでここでは後で大事になる点だけ

デモ

f:id:o108minmin:20201101231204p:plain
instant-kv-demo

応用編

docker run -it --mount type=bind,source={path to kv/test}/test-interval.cc,target=/app/main.cc ghcr.io/o108minmin/instant-kv:main
Contributors

この{path to kv/test}の部分に任意のccファイルのフルパスを指定すれば、任意のファイルをkvでコンパイル可能/実行です

現時点でdocker化すると嬉しいこと

導入が楽・既存環境を汚さない

  • docker化前
    • A「kv使いたい!」
    • B「んじゃubuntu入れて、boost, gcc入れて、/usr/localに入れて(省略)」
    • A1「んー、ubuntu入れるの面倒だな…」A2「今他の研究で使ってるubuntuに余計なものを入れたく無いな…」
  • docker化後
    • A「kv使いたい」
    • B「んじゃこのdockerイメージ使って!」
    • A「自分の環境は壊さなくて済むし、コマンド1発でインストール/アンインストールできて手軽だし、試してみるか…」

kvを使ってみたい!となったらすぐ使えるようになるので導入の敷居が下がると思います。

実行者の環境に依存しない

  • A「kv使ったすごい計算プログラムができた!!!」
  • B「そのソースうちの環境だと動かんな…」
  • A「何インストールしたっけな???」

ってことがこのコンテナ使っている限りは減ります。
(ubuntu上に何をインストールしたかはこのコンテナイメージによって、同じになっているはずなので)

論文などでソースを公開する際も、再現性が高く、検証が容易なはずです。

tagでバージョン分けが簡単にできる

実はdockerのtag機能を使うと kv 0.4.50で実行できるイメージ kv 0.4.49で実行できるイメージ と分けることができます

/Users/o108minmin/go/src/github.com/o108minmin/instant-kv/docker% docker image ls
REPOSITORY                         TAG                     IMAGE ID            CREATED              SIZE
ghcr.io/o108minmin/instant-kv      0.4.49                  29e31a32e09a        About a minute ago   1.03GB
ghcr.io/o108minmin/instant-kv      0.4.50                  80ef85fa78bf        6 hours ago          1.03GB

これを利用して開発時に直っているかどうか確認することが第三者でも容易になります。

/Users/o108minmin% docker run -it --mount type=bind,source=/Users/o108minmin/kv/test/test-interval.cc,target=/app/main.cc ghcr.io/o108minmin/instant-kv:0.4.49

// なんか想定外の挙動

/Users/o108minmin% docker run -it --mount type=bind,source=/Users/o108minmin/kv/test/test-interval.cc,target=/app/main.cc ghcr.io/o108minmin/instant-kv:0.4.50

// このバージョンだと直ったよ!!!

将来的にdocker化すると嬉しいこと

テストの自動化

knowledge.sakura.ad.jp

こういったCI/CDで自動テストを実施する時のベースイメージとして利用できます。
記事中では runs-on: ubuntu-latest ←Ubuntuの最新版環境内で処理を実行することを指定 と指定していますが、ここをkvに差し替えることで様々なテスト/ビルドの自動化が行えます。
精度保証付き数値計算のユーザーが自分のプロジェクトに簡単に精度保証付き数値計算のCI・CDによる自動テストを導入することができます。

kubernetesなどのクラスタ上での処理

kvの設計思想とはかけ離れているかもしれませんが、コンテナ化されていればkubernetesなどのクラスタリング環境でkvの計算プログラムを実行することができます。

どんなCPU使ってるかわからない環境で精度保証できるかは謎です!

問題点

最大の疑問: 精度保証できているの?

  • A1. 大問題なんですがわからないです…。

dockerはLinuxカーネルを仮想化し、その上でコンテナを動作させます。
自分が見当をつけるとしたら下記のようになります。

大体はubuntuを直接インストールした時と挙動は変わらないはずです

速度は早くなるの?

  • A2. 環境によりますが、windowsmacOS上では早くなる(はず)

  • CPU: x86

    • OS: windows
      • おそらくvirtual boxを使ってubuntu仮想マシンで動かしているのと変わらないはず…
      • しかし、virtual box + ubuntu(デスクトップ)版と比較して、GUIレンダリングする必要がないので全体的に軽いはず
    • OS: macOS
    • OS: ubuntu
      • コンテナ化によるオーバーヘッドが少しあるので、ubuntuにインストールした時より少し遅いはず
    • OS: Linux(ubuntu以外)
      • コンテナ化によるオーバーヘッドが少しあるので、ubuntuにインストールした時より少し遅いはず

どうやってコンパイルオプションつけるの?

  • A3. 実は下記のように docker run ... ghcr.io/o108minmin/instant-kv:main {実行したコマンド} とすると任意のコマンドが実行できる。それを応用すればいける(はず)
/Users/o108minmin% docker run -it --mount type=bind,source=/Users/o108minmin/kv/test/test-interval.cc,target=/app/main.cc ghcr.io/o108minmin/instant-kv:main ls
affine.hpp      highderiv.hpp       ode-param.hpp
airy.hpp        hwround.hpp     ode-qr-lohner.hpp
all.hpp         hypergeom.hpp       ode-qr.hpp
allsol-affine.hpp   interval-conv.hpp   ode.hpp
allsol-simple.hpp   interval-vector.hpp odescale.hpp
allsol.hpp      interval.hpp        optimize.hpp
autodif.hpp     jointrange.hpp      poincaremap.hpp
bessel.hpp      kkt.hpp         psa-plot.hpp
beta.hpp        kraw-approx.hpp     psa.hpp
cardano-ferrari.hpp lobachevsky.hpp     qr.hpp
...

(Dockerfileによって、WORKDIRが /usr/local/include/kvになっているのでkvのファイルが見えます)

もちろん定番の -O3 -DNDEBUG も指定可能です。(実行できるとは言っていない)

/Users/o108minmin/go/src/github.com/o108minmin/instant-kv/docker% docker run -it --mount type=bind,source=/Users/o108minmin/kv/test/test-interval.cc,target=/app/main.cc ghcr.io/o108minmin/instant-kv:main c++ -O3 -DNDEBUG -I.. -I/usr/local/include /app/main.cc

またはdockerの実行時に環境変数を流し込めるので、それを利用する手もあります(検討中)

CPUがx86以外ではどうなるの?

  • A4. たぶんエラーなしで動いちゃうんですけど、想定通りに動くとは限らないです…

apple silliconで64bit arm macに完全移行されたらmacはもう終わりです

まとめ

  • kvの導入障壁を下げることができそう
    • 「まずはこれでお試し!」って言って、 minimal-example を渡せばkvの導入としては手軽だと思います
    • これで試してもらって、気に入ってもらえたら、本格的な環境構築をしてもらう流れにすれば完璧
  • windowsmacOSで独自に環境を構築するよりは環境差異が少ない
  • ubuntuLinuxを利用する際も、実行環境を統一した上で動作可能です
  • ただし、精度保証できているかどうかは、未検証です

正直、interval-simpleなどの軽量な実装のほうがdocker化しやすく、授業などでも扱いやすいかもしれません。

2019年参加した勉強会まとめ

この記事は富士通クラウドテクノロジーズ Advent Calendar 2019 19日目の記事です。

昨日は @aokumaさんのニフクラでも Kubernetes をいい感じに使いたい!でした。

というわけでこんにちは!ニフクラでIaaS系サービスの開発をしている id:o108minmin です。 もうフレッシュじゃなくなりました。

サブ業務として私が関わっている NIFcLoungeで印象的だった勉強会や参加した勉強会を紹介します。

第1回 Looking Glass勉強会

lookingglass.connpass.com

普段の業務はソフトウェアがメインなため、このような斬新なハードを見る機会は貴重でした。
この素晴らしさは映像では伝わらないので、是非体験して欲しい。 目の前で3Dモデルが踊るのは衝撃的。

おや?こんなところに募集中の勉強会が…?

lookingglass.connpass.com

GlassFish Users Group Japan 勉強会 2019 Fall

glassfish.doorkeeper.jp

JDKを語り尽くす会です。

普段の業務はソフトウェアがメインなためJavaを触る機会が多いです。
しかしJDKに関しては今年春のライセンス改定時も、「OpenJDKだけ使っていれば良いかな?」程度の理解だけで利用していました。

下記のセッションでOracle JDKに対する誤解も解け、各種ディストリビューションの特徴なども大まかに理解できたのでJavaに対する印象が良くなりました。

www.slideshare.net

何より印象的だったのは「コードが出なくてもここまでJavaについて話せるのか…」という点です。
Javaの世界やコミュニティは想像よりもずっと広い。

July Tech Festa 2019

2019.techfesta.jp

この前行ってきました。
12月に行われた真夏のインフラエンジニアの祭典です。  

とある企業のアンケートの選択肢で「職業: アプリケーションエンジニア」がなかったのでアウェーを自覚しました。

会場ではKubernetesのセッションが目立ち、オンプレやクラウドベンダーなどの動作環境を問わず流行を感じました。

インフラ以外でもエンジニア文化のセッションも多く、イケてる会社の苦労や試行錯誤を聞けるのは貴重な経験でした。
来年は登壇したいですね。

最後に

今年は参加者 or 主催サポートが中心だったためアウトプットできなかったことが心残りでした。
来年度はオンラインオフライン問わず、文章作成や発表の機会を増やしていこう。

明日は、よく飯を一緒に食いにいく@foobaronさんによるネットワークに関する話です。 楽しみですね。

可変長指数部浮動小数点とはなにか?

可変長指数部浮動小数点数の定義

 可変長指数部浮動小数点数(以下、VLE)とは、通常の浮動小数点数とは異なり、仮数部、指数部の区切りを変更することができる浮動小数点数である。

 アイデアそのものは古く。1971年のTapered Floating Point Number(以下、TFP)や1983年の万能数値表現URRなどがある。

 その後、日本ではURRの改良や、回路上での実装が提案されるものの、2000年までにほぼ進歩が止まる。形式として最新なのは1997年の新しい可変長指数部浮動小数点数表現形式の提案っぽい。

可変長指数部浮動小数点数の特徴

 通常の浮動小数点数、例えば64bitの倍精度浮動小数点数(double型)であれば、符号部1bit、指数部11bit、仮数部52bitで構成されている。

 VLEの特徴は先程述べたように、仮数部、指数部の区切りを変更することができることである。そのため、仮数部1bit、指数部と仮数部で63bitという形式になる。URRやTFPの違いは、この指数部をどのように表現するか?という部分である。

 構成の仕方によるが、多くのVLEはIEEE 754 Stdの浮動小数点数よりも以下の点を満たそうとしているように見える。

  • 指数部の大きさに応じて、良い感じに指数部を割り当て、仮数部をなるべく多く確保する

 つまり、指数部の絶対値が小さければ仮数部の割り当てを大きく、指数部の絶対値が大きければ指数部の割り当てを小さくする。そのため、表現範囲がIEEE規格よりも広くなる。(しかし、場所によってその精度が大きく変化する。)

可変長指数部浮動小数点数を勉強する方へ

 もし、可変長指数部浮動小数点数を勉強しようかなと思う方がいたら、以下の順番で読むと良い気がする。

  1. あふれのない浮動小数点表示方式  今のIEEE 754 Stdの規格以前の古のお話が最初に載っていたりする。
  2. 二重指数分割に基づくデータ長独立実数値表現法II  複雑だけどすごい設計。このあとの展開もciniiの被引用論文から多数辿れる。
  3. 新しい可変長指数部浮動小数点数表現形式の提案  URRなどの問題点を指摘している。特に「計算結果の指数部が計算前よりも、2bit長以上増えると面倒なことになる」などの問題点を具体的に指摘しており有用。それを踏まえた上で、どのようなVLEが適切なのかの基準も提案されている。

 詳しい解説・説明は後日アップロードします。

最後に

私が一番イカしている先行研究だと思った松井・伊理形式を考案された伊理先生が亡くなられたそうです。

ご冥福をお祈りします。本当にありがとうございました。

テーマ別mastodonの魅力

テーマ別mastodonの魅力

この記事はみす裏 Advent Calendar 2017の一日目の記事です。

テーマ別mastodonとは「特定の話題が好きなユーザーが集まるmastodonインスタンス」のことで imastodon(アイドルマスター)ハストドン(hearthstone)のようなインスタンスのことを指します。

Twitterではできない最高なところ

入った時点で、話せる人が多数いる

Twitterで、特定の話題を話せる相互フォロワーを作るのはかなり大変で

  1. 検索やRT, オフイベなどで特定の話題が話せそうな人を見つける
  2. リプなりなんなりでコミュニケーションを取っていく
  3. 「あーなんかこのエアリプわかんねえな」とか、RTがあったら該当しそうな人を探して、精度を高めていく。

こんなサイクルでやらなければいけないので、界隈で仲間を作るのはかなり大変である。
しかし、テーマ別mastodonでは

  1. 入る
  2. Local Time Line(以下、LTL)にエアリプを投げ続ける

早い話、先程の1-3のサイクルが終わっている状態で開始することができる。 既存のネットコミュニティの中で近いのは、2ちゃんねる(現 5ちゃんねる)専門板の本スレや、Google+ サークルみたいな感じ。

テーマ別故の特徴

ノイズが少ない

趣味垢をTwitter上で作っても

  • 政治家・政治RT
  • 嘘松
  • リテラシー低そうな人を晒すRT
  • 意識が高すぎるツイート
  • 企業公式垢
  • スパム

などなどが多く存在し、集中できないことが多い。 ツイート・RTしないでくれというわけにもいかず、ミュートも追いつかない。 しかし、テーマ別mastodonでは上記のようなことは非常に少ないので快適。

個人的にインスタンス紹介

imastodon(アイドルマスター)

アイマス好きが集まっているインスタンスアイマスというジャンルの大きさやコンテンツ供給量がちょうど良い(ソシャゲ、ライブ、アニメ、ガシャ更新 etc)。 今はSideMの実況やったり、ガシャで悲鳴を上げたり、墓になったりしている。 人材も幅広く、ガシャ天井RTA勢やクライアント自作勢もいる。 他ソシャゲと兼業している人も多いので、話題も結構多様。

オフも多く、ライブにお花出したりもしている。 https://ameblo.jp/lenp/image-12301056414-14004686505.html

ハストドン(hearthstone)

ハースストーンのインスタンス。 日本人コミュニティが大きすぎないためちょうど良い。 金曜夜のハースストーンワールドを見たり、独自大会なんかも頻繁に開催されている。 来週、新拡張が来るため、リアルタイムで新カードの性能議論したりして非常におもしろい。

オススメクライアント

とある方のリクエス

本家(モバイル・PC)

TweetDeckライクな感じなので既に完璧。 副窓すれば、多インスタンスにも対応可能。 通知もパソコンならchrome経由で受け取れる。 クライアント開発がそんなに盛んではないのは、公式が優秀だからかもしれない。

pawoo(iOS)

iOSではこれ一択では。 通知をiOSで受け取るには一番しっかりしているイメージ 弱点はStream対応してないくらい

imast

Imastodonの方が作っているクライアント Stream対応、nowplaying入力が楽なので、これとpawooでiOSはだいたいなんとかなる

最後に

mastdonはいろいろ騒がれましたが、内側は平和でエンジョイしてる人が多いです。
「ポストTwitter」という視点でウォッチしたい人にはつまらないでしょうが、ちびちびやっていけるんじゃないでしょうか。

Unite 2017に行ってきたよ

Unite 2017に行ってきたよ

見たセッションとかメモとか

Day1

「魔法使いプリキュア!」EDでのUnity映像表現の詳細解説

非公開なのでおおまか。 導入前後での作業フローの比較など。グラフィック寄りの話で素敵なシェーダーの話など。途中で抜けてしまったが、最後の人がおもしろかったらしい(友人談)。
展示ブースでもEDをVR体験。友人が下から覗こうとしたが、当然健全なので、視点は不必要に下がらないようになっていた。治安が良い。

Unity UI最適化ガイド 〜ベストプラクティスと新機能

講演動画、資料リンクから。
プロファイラーなどの使い方を詳しく実践してくれる。学習段階で言うと、Unityでゲームを作り始める前に見たい。

バグを殲滅!Unityにおける実践テスト手法

講演動画、資料はリンクから。
テストツール全般に対してのお話。やっぱUIのデバッグはきついか……。

シェーダープログラミング入門!カスタムシェーダー、作るで!

講演動画、資料はリンクから。
シェーダーも正直魔境だと思って食わず嫌いをしていたが、これ見てるとなんとかできそうな気もする。もう一回見直さねば。

Day2

実演!Timeline+Cinemachineによるカットシーン作り

講演、資料はリンクから。
そのうち搭載されるであろうTimeLineの紹介。今ライブラリ作ってるけど、これできたら用済みになる気がしてきた。南無。

最新 PS VR コンテンツ制作事例紹介 with Unity

非公開なので、おおまかに。 「なぜDWがマシュVRにUnityを使ったのか?」「カヤック傷物語VRで使った表現技法」など説明。これ見ると、両方やりたくなっちゃう。

『Shadowverse開発事例』 ~美麗カードが動く!制作テクニックのすべて~

講演、資料はリンクから。
みんな大好きCygames。
プレミアムカードのエフェクトに使っているシェーダーのお話など。今回のUniteだけでも、シェーダー自作のお話が3, 4つあった気がする。やっぱ軽くて良いんだね。

展示ブース

一覧はここ

日本マイクロソフト株式会社

サイクロップス先輩みたいな写真が撮れる。職業に「VR」とかあったけど、それって職業なんでしょうか?

株式会社Cygames

AGE AGE VR。正直楽しい。
少しルールに慣れがいるが、ゲーセンにあったらやっちゃいそう。

イリュージョン

身体検査をした。やましい気持ちはない。
ブースのお兄さん「誰も見てないから安心して心置きなく検査してね」

魔法使いプリキュア!(東映アニメーション株式会社)

目の前で踊ってくれるのはなんだかんだドキっとしてしまう。

こんな感じ。来年はもういけないかなー。

n=5000兆でヤコブ・ベルヌーイのeの定義は使えるか?

n=5000兆でヤコブ・ベルヌーイのeの定義は使えるか?

https://twitter.com/nrmti/status/868980739047530496 の検証
見づらかったら、ここ見てね 素のコード jupyter ipynb

言語はPythonです。

import decimal
decimal.Context()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

5000兆円欲しい

want = decimal.Decimal(5000 * 10 ** 12)
want
Decimal('5000000000000000')

不要かもだけど

one = decimal.Decimal('1')
one
Decimal('1')

wikipediaの収束数列による定義を参照

e = (one + one / want) ** want
e
Decimal('2.718281828459044963532104625')
import math
math.e
2.718281828459045

うーん、まあまあか

おまけ: doubleでやると

double_want = 5000 * 10 ** 12
e = (1 + 1 / double_want) ** double_want
e
3.0350352065492636

ダメダメですね

武蔵野アブラ学会の美味しいトッピング

武蔵野アブラ学会の美味しいトッピング

 一番槍再び。 この記事はみす裏アドベントカレンダーの一日目です。
テーマなんぞ与えられてないので好きに書きます。

 武蔵野アブラ學会というお店をご存じでしょうか? 公式サイト
 油そばの専門店でここ数年虜になっているので紹介したいと思います。
 油そばの説明とかは省くので各自ぐぐってください。 (学会のQ&Aにも載ってます)

美味しいところ

濃いです。 やたらと濃い味が好きな人はすぐに虜になります。

基本メニュー

これにトッピングや調味料をプラスしていく。

魅惑のトッピングたち

海苔

 私が一番オススメするトッピングは海苔。

  • パリパリの状態で麺に巻いて食べる
  • ひたひたにした状態でご飯に巻き込む
  • 最後までとっておいて、残ったタレを全てすくうように食べる

など可能性に満ちている。 しかも、刻み海苔変更が可能だ。刻み海苔は香りが高く、海苔とタレがより高度に絡むようになる。

f:id:o108minmin:20150730172326j:plain

 一部だけ刻みになったのりたまも両方楽しめるので良い。 ちなみに海苔を追加して、すべて刻み海苔に変更するとこうなる。

f:id:o108minmin:20161028110142j:plain

最高。
ただし、刻み海苔はひたひたになると風味が失われるので、さっさと食べるといい感じ。

味玉

f:id:o108minmin:20160905114059j:plain

 濃いめの味玉は黄身が濃縮されていて、生の状態よりもアクセントを強くつけてくれる。 ご飯のお供にも最適。

生卵

f:id:o108minmin:20161109111414j:plain

 白身と合わさって、タレが薄くなるのでは? と懸念した私を待っていたのは卵黄だった。 卵を溶かして和えると、タレが少し水っぽくなって食べやすくなるので食欲が無いときに向いてるかもしれない。

メンマ

f:id:o108minmin:20150509104758j:plain

 メンマを増すと、タレを残さず食べるためのワイパー代わりになるので、残さず食べられる。メンマの甘さで塩辛さとの緩急がつくので飽きやすい人にも向いている。

肉マシ

f:id:o108minmin:20140520110855j:plain

 學会のチャーシューは固くもなく柔らかすぎないため、いくらでも食べれる。
だが、そんなにチャーシューが好きなら、肉そばにすればもっと幸せになれるぞ。

ねぎゴマ攻め

f:id:o108minmin:20150904132959j:plain

 白ねぎが大量に追加される。大盛り程度だと、しなしなになりきらないので、ダブル以上での使用をオススメする。
ゴマ? あいつは良いやつだったよ。ゴマの風味が欲しいならラー油をかけよう。

ニンニク増し

f:id:o108minmin:20150120111220j:plain

 店内で刻まれたとてもフレッシュな生ニンニクがトッピングできる。 とても香りが強く、大盛り程度だと味が大幅に崩れることもあるので注意。 しかし、特濃油そばはそれに負けない 強さ を持っているので、必ずトッピングすること。 ちなみに、昨日特濃ニンニク増しで食べたら、不調気味だったのが回復したので、これからの風邪予防にぜひ。

f:id:o108minmin:20161129114354j:plain

 ほかにもキムチやマヨネーズなどのトッピングがあるが、研究できてないので今後の課題とする。

調味料

 食べるときには、食卓の脇においてある調味料も欠かせない。
これらも紹介していこう。

 油そばの定番。かけすぎるとタレが薄くなってしまうが、食べやすくなる。 食べるのがつらくなってきたら、酢を増してサッパリと食べていくのが良い。

胡麻ラー油

 ゴマ油の香りが強く押し出されたラー油。これと酢の相性は抜群なので是非やってほしい。

山椒ラー油

 山椒の香りがつけられたラー油。胡麻ラー油よりも控えめで爽やかさが増す。胡麻ラー油をかけずに山椒ラー油だけ使うのもまた一興。

以下のものは食べる分だけかけながら食べると、味の変化をより効果的に楽しめる。

コショウ

 あらびきのものが銀色の容器に入っている。酢とラー油をかけたあとの最初の変化をつけたいときにかけてみて。

山椒

 ミルでひいてかけるので、舌にビリビリとくる感触が濃い味と絡んで心地よい爽やかさを演出してくれる。 山椒ラー油と合わせるのが最高。

たまり

 ラー油を作ったときのスパイスらしい。 辛さは控えめだが、麺とよく絡めると辛さが増す。 香りが独特なので最初は加減しながら入れよう。

最後に

 いろいろ言ったが、最初に食べるなら「海苔味玉油そば大盛り + ご飯」がオススメ。
次からは特濃なり、自分だけのトッピングの組み合わせを模索していこう。

f:id:o108minmin:20160706110828j:plain

良い油そばライフを