2020年春季投稿大会 | カオスの坩堝 https://anqou.net/poc Chaos is not kaos. Mon, 30 Mar 2020 09:43:21 +0000 ja hourly 1 https://wordpress.org/?v=6.1.1 https://anqou.net/poc/wp-content/uploads/2018/02/9dc10fe231765649c0d3216056190a75-100x100.png 2020年春季投稿大会 | カオスの坩堝 https://anqou.net/poc 32 32 2019年度未踏に関する備考録 https://anqou.net/poc/2020/03/30/post-3240/ https://anqou.net/poc/2020/03/30/post-3240/#respond Mon, 30 Mar 2020 09:11:20 +0000 https://anqou.net/poc/?p=3240 本記事は@ushitora_anqou(以下、お魚さん)の開催した投稿大会に当たってせっかくだしそこに投げようかという気分で執筆されたものである。ちなみに間に合ってない。WordPress何もわからんので見づらいかも。なんか途中から口調が変わってるんですがまぁ執筆が日をまたいだのであれ。

主な登場人物

@nimdanaoto:筆者

@Vtb:同じサークルに所属するみかん。祖父が鯛の養殖をしてるらしい。彼との会話でアイデアが固まった。自作CPUしてたし興味あるんでねと思って声をかけたやつ。

@ushitora_anqou 初見はk/vmだったと思うんだけどCコンパイラが書ける頭おかしい(そういう名前の賞もらってたしほめことばに違いない)のがいるというのを覚えていたので、みかん経由で声をかけた魚。自然言語コンパイラ。

準同型暗号という、暗号文のまま計算ができる暗号がある

全ては、2019年2月末に聞いたこの言葉から始まった。私は暗号を含む理論担当だったわけだが、私はこのときまで暗号はRSA暗号しかまともに知らない(素数が好きだったので高校時代に素因数分解にハマっていたからこれだけ知っていた)状況だった。そんな中、4回生の特別研究のための研究室紹介に潜り込んだ私は、この1文を聞きおもろげだったので適当に調べ始めたわけである。

おそらくこんな記事を見ている人間なら理解はしてくれると思う文化として、何かその上で計算可能なものを見つけたら、チューリング完全かどうかを考えたり、CPUが作れるかということを考えるものである。マインクラフトが好例だろう。パワーポイントでチューリングマシンするのはどうかと思う。

幸いなことに、準同型暗号ではすでに任意の論理演算ができることがすぐにわかった。主流の準同型暗号ではある整数を法とした剰余環上の演算を考えるので、2を法とした足し算でXORを、掛け算でANDを作ることができる。まぁ、私が使っているTFHEは全然原理が違うどちらかといえば傍流なやつなので二項の論理ゲートは全てstraight-forwardに定義できるのだが。

論理ゲートができることがわかれば、次に考えるのはCPUができるかどうかである。ここまでは趣味的な意味ではごく自然な発想であった。

みかんの啓示

私はエピソード記憶が弱いので正確にどんな会話をしていたかは覚えていないのだが、部室でみかんと会話したことは覚えている。未踏の応募締切が近いのは知っていたので、何かアイデアがあるかという話になって、確かみかんから分散コンピューティングまわりのもの作るのはどうだろうかみたいな話になって、そこに準同型暗号上でCPUを作るアイデアを話して、あーそれ分散コンピューティング的にも嬉しいんでねーとなってVSPの原型のアイデアができた気がする。

成果報告書とかをみると、クラウドへのオフローディングを中心としたストーリーになっているが、応募書類の段階では分散コンピューティングの話とかになっているのはこのためである。実装のコアとなるアイデアはここでできたものだが、見せ方となる応用は二人の趣向の関係で分散コンピューティングが最初に思いついていたわけである。

ちなみに、この段階ではCPUといってもJVM的なもののほうがスタックマシンだしリソースが少なくなってええんでね?みたいな会話をしていたはず。

魚類現る

なんとなくのアイデアが出たはいいが、このアイデアには重大な欠陥が一つあった。明らかに既存のものをそのまま流用すると遅すぎるのである。私は電気電子の人間なので、TFHEの1ゲート10msをそのまま普通のCPUやらJVMやらのエミュレーションにつかったらとんでもなく遅くなることぐらいは最初からわかっていた。それを無理やり回避するには、CPUのISAを変えるなどコンパイラのレベルにまで影響する変更が必要だろうと予測されたのである。コンパイラもやろうと思ったのは、私自身がアセンブラなんてかけないので、自分(つまりおそらくはVSPに興味を持つような人間の多く)が使えないレベルのもの作っても哀しすぎでは?と思ったのと、いい具合にコンパイラかけそうな存在、つまりお魚さんがいたからである。

「きっとこの手の人は自分の好きなことがやれる口実を提供すれば釣れるし、関わってしまえば他のこともやってしまうに違いない」という当時の勝手な印象通り、ほぼ二つ返事みたいな感じで了承してくれたし、それ以外のことも色々やってくれた。確か学食の入り口そばの席でプレゼンして、その席にあった壁掛けディスプレイに私は頭をぶつけた気がする。

私は電気電子の人間なので、プロセッサを書くことはできたかもしれない(まぁ、経験を含むもろもろの問題でみかんに劣るし、そもそもみかんが居なかったらアイデアを相談する相手が居ないので形にならなかったとは思うが)がコンパイラは何もわからんのでお魚さんがいなければコンパイラがつくことはなかっただろう。そういえば結局一番働いていたのはお魚さんだと思う。多分ビリは私である。

お魚さんに声をかけたときには、Yosysを使ってVerilogからTFHE上でそれをエミュレートするための情報を得ようみたいな話は出来上がっていた。

ベッドの上の三日間

実のところ、お魚さんに声をかけた時点で3月に入っていて、未踏の応募締め切りまで1週間とかしかなかった。しかし、私は暗号の専門家どころか情報の人間ですらないので、応募書類を書くには知らないことが多すぎた。その結果、3日間ほど食事以外ほぼベッドの上から動かずに論文を読んで応募書類のためのアイデアを練る時間が発生することとなった。あれだけ一つのことに集中できたのはなかなか久しぶりのことであった。

お魚さんの自然言語コンパイラとしての機能はこの時点から観測されていて、細かい応募書類の言い回しとかの修正は彼によるところが大きい。

最終的には、内容を書きすぎて余白を狭くして参考文献のリストの改行をなくすとかいう暴挙をしていた。まぁ、3人も居たからこその物量とも言える。

PMはあなたのプロジェクトの分野の専門家とは限りません

応募書類を作って送って通れば次は2次審査になる。(PMにプレゼンをする)このときに、進捗的なものがあれば入れろと言う話があったので、応募書類を出してから気づいたHomomorphic Processorとよばれる競合する分野に関する話をした。明らかに反応が何を言っているんだろうこいつはという感じになっていた。プレゼン作るときはその筋の専門家に突っ込まれることを(素人なりに)想定して作っていたわけだが、その場には誰も暗号やセキュリティをメインとしている専門家など居なかったのである。興味は持ってもらえたし、熱意と何となく過ごそう的な印象は与えられたっぽいが、この段階で我々のプロジェクトを、そのコアのアイデアでさえ完全に理解できた人はあの場には居なかったはずである。なにせ、担当になった首藤PMですらあの段階どころか始まって1ヶ月ぐらい後までご理解頂いてなかったのだから。

そういえば竹内PMにはこの時点でそんな遅いんだったら計算処理を移譲せずに手元でやったほうが速いのでは?という質問を頂いた気がする。それは現状でもそのとおりといえばそのとおりで、他の採択プロジェクトを見ても感じられる通り、経産省のプロジェクトということもあってか明日使えるようなプロジェクトが望まれているように見える。そんな中、「明日ではなく十年後」というのを最初から認めてもらえる首藤PMに当たったのは運の良いことで、多数決では決まらないPM制の良い点(と言えるようにするには今後の我々の努力も関わるが)と言えるだろう。

そういえば2次審査の帰りに秋葉でいきなりステーキを初めて食べたのを覚えている。

礎となったV2TT

とりあえず採択されるまでの経緯っぽいことは書いたので、次は作ったもので特に私が関わったことの話をしよう。最初に作っていたのがV2TTである。こいつは、Yosysが吐いてきたJSONのネットリスト(最初はBLIFにするつもりだったのだがBLIF何もわからんかった)を読んで、それを静的に解析してTFHE上で実行するためのC++コードを吐くトランスパイラであった。この静的に解析するというのが問題で、並列性を引き出すのにそれぞれの論理ゲートが入力から論理ゲートを何段経由するかを数えて同じ段数のやつだけを一緒に実行するという形式にしたので、段ごとの数によってはCPUの稼働率が急落する感じになってしまった。しかし、V2TTの段階で第三世代のCPU(誕生石にちなんだ名前だったのでaquamarine)までは動作の確認が取れたのは大きかったと思う。

性能の問題に関してはみかんが原型を作ってお魚さんがリファインしたIyokanが解決し、V2TTは現在凍結されている。V2TTは本体となるPythonスクリプトは200行程度しかなく、まぁPoCとしては良かったのではないかと自己評価を下すところである。

書く予定じゃなかったpyFHE

次に作ったのがpyFHEである。こいつは応募当時の予定には存在しなかった。応募当時の予定ではTFHEのライブラリは既存のものを使うことを想定していたので、自前でフルスクラッチするつもりはなかったのである。じゃあなんでこいつが生えてきたのかと言うと、端的に言うと一瞬暇ができたからである。V2TTが一応できてしまったため、コンパイラとCPUの完成を待つ時間が少しだけ生まれた。何もしないのもあれなのと、最終的にはcuFHEと言うCUDAで書かれたTFHEライブラリに手を少し加えることになるだろうという見込みがあったため、そのときに少しはTFHEがわかっていないと困るだろうと考えたのである。それでPython3での実装を書き始め、結局フルスクラッチした上に原論文者の実装には統合されていなかったCircuit Bootstrappingと呼ばれる機能まで実装した。

pyFHEで得た教訓は、Pythonはなんだかんだ言ってやっぱり遅いと言うことである。私が書いたオリジナルの実装では一ゲート処理するのに10秒かかっており、次に見るお魚コンパイルを受けても1秒かかる状態で100倍ほど遅かった。CythonとかNumbaとかあるけれど、結局C/C++が生き残っているのにはやはりそれなりの理由があるのである。

お魚コンパイル事件

お魚コンパイル事件は、pyFHEの実装が知らない間に10倍速くなっていた事件である。お魚さんにpyFHEのコードを渡したら、なぜか10倍速いPythonコードになって返ってきた。Cythonとかを使ったという話ではなくて、numpyが効きやすいようにコードの意味を保ったまま書き換えたとのことであった。実は未だに自分のコードとお魚コンパイル後のコードが意味的に等価なのかどうかよく理解していない。まぁ動くんだからヨシ。

この事件は「お魚さんはコンパイラを書ける」が「お魚さんはコンパイラである」に変化した契機であった。その後お魚さんはTFHEの再実装としてaqTFHEも書いたのだが、そこまでしてもTFHEの原理を理解していないし論文も読んでないとのことであった。コンパイラは普通自分がコンパイルしているソースコードの意味は理解していないので、本当にコンパイラだなぁという気分になるところである。

闇に消えたjlFHE

pyFHEはだめだったが、当時の私はC++を書きたくなかった。C++はベターCだと思っていたし、Cでコードを書くには人生は短すぎるからである。そこでトライしたのがjuliaだったが、私にはjuliaは全然噛み合わなかった。なぜお前はそんなに配列と行列を区別しようとするのだ……

ちなみに未踏後に見つけた別の人が作った実装としてTFHE.jlがある。こいつはMulti-Keyも実装しているらしいのでいつか参考にするだろう。

なぜか速くなったTFHEpp

pyFHEで統合したCircuit Bootstrappingはアルゴリズムレベルでの高速化が期待できる代物で、C++実装でも使いたいものであった。しかし、TFHEの原論文者実装に組み込むのは私には困難なものであった。Cとの互換性を強く意識していたり、やけにアセンブラで書かれたところが多かったり、関数が細かく分割されすぎていたのが原因であろうと思う。読む分には読みやすい方のコードだと思うが、拡張性は低かった。3人の間ではえーでもフルスクラッチするより拡張するほうが早いんでねーという感じはあったし私もそうかもしれないとは思っていたのだが、pyFHEができていたしできなくはないはずだしそっちのほうが楽しいだろと思って年末年始に黙って作り上げたのがTFHEppである。そういうことが許されるのが我々のチームの良いところでもあり悪いところでもあった。つまり、お互いの専門範囲がよくわかっていない(プロセッサはできるかもと前に述べたが、それは理論的にはというレベルであってコンセプトはともかく実装に口出しできるほどわかっているわけではない。スーパースカラ何もわからん)ので結局のところ担当者が取り掛からないアイデアは実行されず、最終決定権はそれを作る人間にあったのである。お魚さんはバス係数が1と何度か言っていたが、まぁマジでそうである。

TFHEppは、拡張性を確保するためにアセンブラを極力廃し、C++17の機能も積極的に取り入れたつもりである。その結果、何故か10%ほど原論文者実装より速くなった。どうやら各種パラメータをランタイムに決めるのではなくconstexprにしたことでコンパイラの最適化が効きやすくなったことが原因だったらしい。しかし、FFTをする部分のコードは原論文者のアセンブラコードのほうが速く、そこはそのまま用いた。コンパイラによる最適化がアセンブラに勝つ場合とその逆を両方見れたので実に良い経験だったと思う。

C++はベターCではありません。

不備の多かったcuFHE

前に述べたように、CUDA版実装であるcuFHEを用いるのは既定路線であった。ので、TFHEppを書いた後にこれをいじってみたのだが、不備が多かった。結局、足りないゲートを生やしたりするのに自分たちでforkしたver.を使うことになった。いつのまにかみかんの手によってMultiGPUにも対応した。ゲートのテストはお魚さんの手によってテンプレートの塊になった。あんな機能があるとは……

CUDAを書くのは高校時代からの夢だったので楽しかったのは間違いない。一つ夢を叶えたのである。

計画だけされたFFHEE

cuFHEはNTTを使っている都合で、Circuit Bootstrappingを導入するのが難しかった。そこでFFTを使ったバージョンを作ろうと計画されたのがFFHEEである。未踏期間中は結局ほぼ何もできなかったのだが、現在製作中なのでそのうちできると思う。果たしてスピードは出るのだろうか。

コミュニティについて

まぁ最後の方は適当な感想を書き残そうと思う。なんかTwitterで未踏コミュニティが云々みたいな話があったが、私はあんまりそういう意識はなかった。近い順にみかんとお魚さん、首藤PM、未踏事務局の方と同期であるBI-SGXのSさん、その他(まぁ細かく言えばもちろんその中でも明確な順番はあるけど)ぐらいの感じでコミュニティっていう気分はなかった。これは我々のプロジェクトが他の人にはアドバイスしづらい(準同型暗号なんてやっている人間はほとんど居ないし居てもまたその中でもTFHEは傍流なので)こともあって、放置されぎみだったこともあるだろう。まぁ、我々の場合は放置されてても自分たちで学習して好きにやっていたのでありがたかったが。PMと事務局の方にはお世話になりました。

採択は運です

どちらかといえば未だに決定論者の人間が運なんて言葉を言うのはアレなんですが、確率ロボティクス的な気分で言うとPMのことを知っているパターンなんてまずありえないので運というしかないでしょう。先にも述べましたが、VSPは採択時点で内容を理解していた人はおらず、首藤PMも正直これ大丈夫なのかなという思いもある中で採択されたと言っていました。未踏はまさしく未踏領域に踏み込むことを期待しているわけですので、そういうテーマも採択されることはあります。しかし同時に、わかっていて選んでるわけでもないのである程度乱択的な側面があるのは否めないでしょう。落ちたとしてもあなたのテーマが悪いとは限りません。

過去のテーマを参考にするかどうかですが、我々の場合過去に独自CPUとコンパイラをやった例があったので、今回はある意味そのスーパーセットになるので大丈夫だろうという考えと、FFTをやった例を知っていたので基礎研究的なものも許されるだろうという考えはありました。

大抵のアイデアはあなたが最初ではありません

人間の頭の個体差なんて大してありません。能力の根源はほぼ間違いなく才能ではなく環境です。少なくとも、その信念が今日の公教育制度の根底にあるものです。人間の体の構成なんて認知革命の頃ぐらいから大して変わらないんですから(もちろん、性別で内臓の種類が変わったり東洋人と西洋人で尻の穴の位置が違うとかそういう話はありますが、認知機能に大きな影響を与えるほどのものとは思えません。だからこそ今日の社会があるはずです)同じような環境に生きていれば同じような発想にたどり着くものです。あなたの特別な経験から来たとかでない限り、あなたのアイデアはおそらく他の人も思いついているはずです。実際、採択されてから同様のプロジェクトが公表されて方針転換を迫られた例は見ていますし、終了したタイミングの前後で公表された例もあります。VSPも、BrainfreezeArcaneVMといったBrainfuckを動かせるCPU的なものをTFHE上で動かすものはプロジェクトが開始してから発見されました。(なぜそんなにBrianfuckが好きなのか……)

そういうことがあったとしても、柔軟に対応して続けられるかというのが大事だと思います。

かなりの実装力が要求される

まず言っておきますが、私はどちらかといえば理論屋です。実装力ではとてもじゃないですが少なくとも現状みかんやお魚さんには勝てません。お魚さんは逆に自分は実装の人間と評してます。なぜそれを先に前置きするかと言うと、未踏で要求されている実装力のレベルはみかんやお魚さんレベルだと思うからです。

先に述べたように、大抵のアイデアは他の人も思いついているはずです。では、なぜそれがやられていないように見えるか?その原因は多くの場合労力にあります。VSPも、準同型暗号ライブラリとCPUとコンパイラとISAと準同型暗号評価エンジンとUIを作ってつなげればそれで終わりで、考えるのは簡単です。しかし、実装には期間一杯かかってそれでも完全ではありませんでした。もしあなたが本当の意味でノーベルなアイデア(多くの人は自分のアイデアがそうだと思い込みがちな気はしますが)を持っているのでなければ、あなたのプロジェクトをノーベルにするのは実装力です。

首藤PMには、3人とも一人で一つの未踏プロジェクトができるレベルだという評を頂いたことがありますし、それは大変光栄ではあるのですが、まぁ正直私に関してはそれは過大評価だろうなと思っています。私は何をするにも行動せずに考えすぎるところがあるので、準同型暗号みたいな理論と深く関わる部分だけを作るならまだしも、他の部分までやるのは明らかに実装力不足で時間が足りなかったでしょう。また、準同型暗号のような理論的なところをじっくりとできたのは、他の二人が目に見える進捗を出し続けてくれたので、進捗の見えづらい基礎的なことをやっていてもプロジェクトとして進捗を疑われるような事態になることはまずなく、同時に自分も進捗を報告できるようにしたいという考えがモチベーションになったところがあります。私は飽き性なところもあるので、一人だったら3ヶ月位で飽きていたかもしれません。

本当に、一人で未踏プロジェクトを完遂できる人間はすごいと思います。おそらくですが、首藤PMから過大な評価を頂いたのは、3人で合計してみるとPMの中での未踏プロジェクトを完遂できる最低ライン的なものの3倍より大きく見えたからなのでしょうが、そのラインはどこか一要素でも最低を割ると意味のない基準で、それを一人で満たせるというのはすごいなぁと思います。

あなたのアイデアはあなたの子供です

最後に、どこで見かけた言葉だったか忘れたけれど、期間中にたまに思い出したのがこの言葉です。VSPを理論的な意味で本当に理解していたのはおそらく期間中では、下手すると今でも私だけで、VSPのここが既存研究と同じなのではないかとか、こういう脆弱性や欠陥があるのではないかという指摘が合った時に、VSPというアイデアを守れるのは私だけだろうという考えがときたま頭に浮かんでいました。

あなたがそのアイデアにどれだけの労力をかけたかなんてどうでもよいのです。自分の子供にかけた食費やら教育費やらの額が直接子供を助けるなんてことはないでしょう。与えた食事による免疫力の強化や学校で得た知識が守るのであって、そこには金額からの変換効率があり、ゼロであることもありえます。そのアイデアに思い入れがあるなら、適切なところに適切な労力を投入できるのはあなただけです。

まぁ、もちろん本物の生きた子供ではなく比喩なので、アイデアを放棄せざるを得ないことはよくあることです。そういうときには、どうにかして一部だけでも延命できないか、あるいは納得して放棄できるように十分に検証するのが、せめてもの行いだと思います。

長くなりましたがこんな感じで備考録としては十分かと。

]]>
https://anqou.net/poc/2020/03/30/post-3240/feed/ 0
少年漫画は大きく分けて2つに分類される https://anqou.net/poc/2020/03/29/post-3237/ https://anqou.net/poc/2020/03/29/post-3237/#respond Sun, 29 Mar 2020 14:57:22 +0000 https://anqou.net/poc/?p=3237 書くこともないけれどせっかくなので記念カキコ.

少し前の私のTwitterのオタク垢で深夜テンションで書いた内容なのだが,少年漫画は――正確には,私がほぼ少年漫画しか読まないからそれしかわからないのだが,その内容で明確に2つに分類される.それは「女性を助ける」漫画か,「女性を助けない」漫画だ.

前者は,ゲームで言うとマリオで,何らかの理由で囚われた姫(ピーチ)を勇者(マリオ)が助けるという構図になっている.姫側の「強さ」はまちまちで,完全にか弱かったり,主人公と同じくらい強かったりする.逆に後者は,そのような構図がない.

どうして私が,「女性を助ける」やら「女性を助けない」やらで区切るのか,疑問に思う人もいるかもしれない.私がこの分類を行う理由はたった一つ,それは少年漫画だからである.少年漫画とは,少年に楽しんでもらうための漫画である.そして「強い男性が女性を助ける」という構図は,はるか太古から男性に支持されてきたシナリオだ.さらに,少年漫画の作者には男性が多く,そのことも「女性を助ける」構図を多用する傾向に拍車をかけている.

だからなんだという話ではあるが,要するに性差が明確に現れた事例だなあということである.私は「女性を助ける」漫画も「女性を助けない」漫画も,面白ければそういったことは全く気にしないが,そういった見方を持って少年漫画(と,特にライトノベル)を観察するとなかなか興味深い.逆に,「この漫画は私には合わないなあ…」と感じる方は,もしかしたらこのような分類の片側を嫌う傾向にあるかもしれない.

作品名を出すと叩かれそうなのであいまいな文章になってしまったが,こういった視点を持って作品を観察してみては如何だろうか.

]]>
https://anqou.net/poc/2020/03/29/post-3237/feed/ 0
テーマ「タクシー」 冒頭部 https://anqou.net/poc/2020/03/29/post-3231/ https://anqou.net/poc/2020/03/29/post-3231/#respond Sun, 29 Mar 2020 14:34:46 +0000 https://anqou.net/poc/?p=3231  先日、サークルの方で「タクシー」をお題に短篇小説を書きました。十数ページほどの短い小説ですが、その全文をここへ載せるのは読みやすさの面等から躊躇われましたので、冒頭部の一節のみを掲載させていただくこととします(坩堝掲載に際し一部推敲)。

————————————

 ターミナルを出た人影が、早足でこちらへ近付いてくる。私は窮屈な運転席に身を収めたまま、ミラー越しに様子を窺っていた。

 背の低い、旅支度の女性。同伴者はおらず一人――ここではあまり見ないタイプの客だった。ファーの付いたねずみ色の防寒着に全身を包んで、両手には古びた重そうな革鞄を提げている。外で荷物を受け取ろうか迷ったが、こちらへ歩いてきているだけでまだ乗客とは限らない。バックミラーの中で揺れる鞄を、ただ見つめて待った。

 後部扉の傍まで来て革鞄は動きを止めた。結露が流れて縞模様を作る窓の、ぼやけた視界の中心に彼女の顔が映る。私が操作盤へ手を伸ばし、自動扉が音を立てて開放されると、客よりも先に外気が乗り込んできて私の首筋を冷やした。

「どうも――区役所までお願いします」

「はい、区役所。裏の駐車場で降りていただく形となりますが」

「大丈夫です」

 女性客の声は寒さに震え、そして若かった。ニット帽を脱ぎ、巻きつけたマフラーの下から長い髪を出したのを見て初めて、私は彼女が二十歳にも満たない少女であるのだと気付いた。

 少女は鞄を空いた座席へと引っ張り上げると、膝に手を置いた姿勢でシートに深く背中を預けた。瞼も閉じていたので、私は彼女がそのまま眠ってしまう気なのだと思った。

「すみませんが」と声を掛けると、彼女はすぐに目を開いて運転席を窺った。

「シートベルトを着用願います。できれば、荷物もお手元に。重いものでしたらこちらで預かってトランクに入れておきますが」

 非難するつもりはなかったが、彼女にはそう聞こえたのか急いで言う通りにすると、俯いて黙り込んでしまった。何か取り繕っておきたかったが、今しばらくはこちらから言葉を発しても萎縮させるだけのように思われて、結局私は何も言わぬままエンジンを点けた。常に大きく駆動音が響く中では、いずれにせよ小声での会話は望めない。私が操作盤の確認を終えるまでの間、少女は一言も喋らなかったと思う。

 外で風が渦を巻いて、窓の結露を四方八方へと吹き散らしていく。左手がレバーを捻るごとにエンジンは回転数を速め、小刻みな振動に背の震えが増していく。後部座席では、少女が左窓から外の様子を興味深げに眺めていた。

 もう良いだろうと思って、私は振り返って彼女に話しかけた。

「こいつに乗るのは初めてですか」

 少女は頷いて、しかし私と顔を合わせることはせずいっそうガラスに顔を近付けた。

「ええ。修学旅行で大型のに乗ったことはあるんですけど、こういう……」

「小さいのは」

「ええ。こういった個人用の乗り物は経験がありません」

「でしたら、よくご覧になるといいでしょう。――じき無くなっていく機体です」

 付け加えるように小声で呟いたから、彼女の耳には届いていないかもしれなかった。私は既に前の操作盤へ目を落としていて、少女も言葉を返してはこなかった。

「もう一度、安全をご確認ください。少し、いや、かなり揺れますので」

「大丈夫です。むしろ、ちょっと楽しみなくらい」

 目を反らしたままではあるものの、少女はそう言って微かに笑顔を浮かべた。運転手として、悪い気はしなかった。

「では、離陸します」

 言うと同時にレバーを手前へ引き込む。底部に嵌め込まれた二つのプロペラが跳躍するように高く唸り、次の瞬間には機体を滑走路から浮かばせていた。後部座席から感嘆のため息が上がったような気がした。

 運転手一名、乗客一名を載せた小型タクシーは少しの間前方へ滑ると、高度を上げて空港上空を飛び去っていった。

]]>
https://anqou.net/poc/2020/03/29/post-3231/feed/ 0
2019年度未踏体験記 https://anqou.net/poc/2020/03/29/post-3194/ https://anqou.net/poc/2020/03/29/post-3194/#respond Sun, 29 Mar 2020 11:52:05 +0000 https://anqou.net/poc/?p=3194 2019年度の未踏事業で「準同型暗号によるバーチャルセキュアプラットフォームの開発」というのをやっていました。その体験記というか感想というか、8ヶ月間何をやってたのかというのを晒したいと思います。例によってとりとめのない駄文なので読みにくいと思いますが、ゆるして

登場人物

  • @nimdanaoto
    • プロジェクトのリーダーで、言い出しっぺ。主に暗号理論や準同型暗号ライブラリの開発を担当。
  • @VTb
    • プロジェクトのメンバーで、言い出しっぺに最初に乗っかったやつ。主にプロセッサの実装と準同型暗号論理ゲート評価エンジンの実装を担当。
  • @ushitora_anqou
    • 筆者

はじまり

2月某日に @VTb からこんなDMが届きました。

@VTb「未踏で2人共同で出そうとしてるですけど、鮟鱇さんも興味ありませんか?テーマとしては準同型暗号上で動くセキュアなプロセッサエミュレーションです。」
@ushitora_anqou「とっても興味がありますが、それは私が噛んでも大丈夫なものですか?」
@VTb「今回のセキュアプロセッサを開発するに当たり、コンパイラや類するツールチェインの開発をする可能性があるので助けていただけると嬉しいです。あと、単純に強い人手がほしいのと、なんか楽しそうだからです」

『なんか楽しそう』かぁ〜〜! そっかぁ〜〜!」と嬉しく思った記憶があります。能力をあてにされるよりも性格をあてにされるほうが嬉しいですよね。

このDMのあとオフラインで打ち合わせをしてその中身を把握し、正式にプロジェクトに参加することになりました。ちなみにこの時点で未踏の申込締切まで1週間程度しか無かったので急ピッチで申し込み書類などを書き上げて提出しました。その際の資料はここで公開しています。

無事に書類審査が通った後に二次審査(PMの前でプロジェクトについて話す)を受け、なんとか採択されることになりました。ここは特に面白いことが無かったので割愛。

LLVMバックエンドを書く

今回のプロジェクトの前半では、私はひたすらLLVMバックエンドを書いていました。LLVMバックエンドというのは、まぁ大雑把に言ってしまえばLLVM coreのコード生成を司っている部分で、抽象構文木(AST)からアセンブリを吐き出す部分を担当しています。このプロジェクトでは命令サイズを小さくする必要が有ったために、独自のISAを計3個も作成しました。この各ISA上でC言語を動かすために、LLVMを利用してCコンパイラを3回作成したわけです。

これがなかなかやっかいで、まずろくに資料がありません。LLVMのサイトを見れば “Writing an LLVM Backend” というドンピシャな文章があるように見えるんですが、これを読んでもバックエンドは書けません。というのも、チュートリアルのような書き方をされてはいないため、LLVM coreを何も知らない状況では読み解くのが難しく、全体として「分かっている人」を対象にしているような印象を受けました。他の資料としては、有名な「きつねさんでもわかるLLVM」にもLLVMバックエンドに関する記述がありますが、こちらも若干情報が古く、またLLVMバックエンドとしては限定された機能しか実装されていません。

最終的に一番参考にしたのはRISC-V用のLLVMバックエンド(とそれに関する資料)でした。RISC-Vバックエンド開発は(おそらく他のバックエンド開発を支援するという目的から)その開発資料を多く公開しています。例えばRISC-Vバックエンドを追加するイテレーティブなコードの編集をパッチの形式で公開しているほか、初めの方のパッチについてはドキュメントまで整備されています

というわけで基本的な開発はRISC-Vバックエンドのパッチをひとつひとつ自分たちのISAに移植していく作業となりました。単純にコピペして名前を置換するだけですめば楽で良かったのですが、RISC-Vとは異なる部分も多かったため、そうもいかず大変でした。例えば条件分岐の際に直前の命令の演算結果を見て分岐するような命令(CMP+Jcc)を実装する際には、否応なくx86バックエンドを参考する必要があるわけですが、その規模の大きさと読みにくさに大変苦戦しました。

ただまぁ、いま振り返って見れば、かなり順調に進んだなぁという印象です。結局最後まで「コンパイラのせいで○○ができなかった」ということはありませんでした。

Iyokanの開発

1月くらいからは準同型暗号ゲートを実際に実行して結果を得るためのエンジンを書いていました。もともとは @VTb がIyokan-L2という名前で書いていたものを実装のアイデアだけはそのままにフルスクラッチし、より機能を追加したバージョンを作成しました。これを使うことで論理回路を、その論理ゲートを対応する準同型暗号のゲートに置き換えて実行することができ、それはつまり「暗号化された入力を暗号化されたまま実行して暗号化された結果を得る」というVSPの根幹のアイデアを可能にしています。

Iyokanが内部で実行している準同型暗号のゲートは、実際には外部のライブラリに処理を移譲しています。具体的には、CPUのみを用いて実行するときはTFHEpp、GPUも使用できる場合はcuFHEというライブラリを使用します。この二つのライブラリを透過的に、つまりIyokanのユーザーからは同じ操作感で使用できるように気を配りました。cuFHEにはなくTFHEppのみにある機能なども現時点では存在するため、cuFHEで処理したほうが速い場所はcuFHEで処理し、そうでない箇所は適宜cuFHE用のデータをTFHEpp用に変換した上でTFHEppに流し込む、といった機構も実装しました。

ところで現状のIyokanを、例えば手元にあるGPUのNVIDIA GTX 1660Tiなどで動作させると、テストに落ちます。面白いことに、NVIDIA V100という数値演算用のGPUで動作させるとテストは正常に終了します。もちろんIyokanの実装が何かしら間違っているということも大いに考えられるのですが、一方で数値演算用のGPUでないと計算誤りが発生するのではないかとも考えられます。このような特徴は、計算誤りにロバストな深層学習などではそれほど大きな問題になりませんが、暗号の演算では致命的です。普段このようなことが問題になる場所に出くわしたことが無かったため、この経験は新鮮でした。

小規模チーム開発

今回のプロジェクトで面白かったのは、メンバー各々がほか二人の作業内容を肩代わりできないことでした。例えば私はコンパイラ担当だったわけですが、他の二人はコンパイラの中身について詳細を知りません。同様に私は @VTb が作ったプロセッサの中身についてほとんど知らず、また @nimdanaoto が担当した暗号理論について私と @VTb はほとんど知りません。各々が自分の担当部分の仕事を完璧にこなし、各々の部分の結合に用いるインタフェース(ISAやライブラリAPIや論理回路のポート名)だけを統一していました。良く言えば疎結合で無駄がなく、悪く言えばバス係数がほぼ1で、誰かが倒れると後がありませんでした。

また開発方針が食い違うことも多く、Slackはよく殺伐としていました。議論で埒が明かないときにコードを叩きつける、という展開も何度かありました。お互いがお互いを尊敬しつつも、おかしいと思うことはズバズバ言うというスタンスで、最終的に成果が出たから良いものの、出ていなければ途中で空中分解してもおかしくない危うさがありました。ただこの雰囲気のおかげで良いものが作れたという自負も多少あります。

雑感

あんまりおもしろくない体験記になってしまいました。未踏期間、山あり谷ありだった気もするのですが、喉元すぎればなんとやらであんまり覚えていません。こんなことならaqccのときみたいに日記をつけておくんだったなぁと反省しています。ちなみに技術ログはつけてあるので、そのうち「自作ISAのためのLLVMバックエンドを書く薄い本」を出せればいいなぁと思ってリポジトリだけ作ってあります

8ヶ月間かけて、自分は実装の人間なんだなぁというのを再認識した気がしています。手を動かすのがすきと言ってもいいかもしれません。理論を組み立てるよりも、それをどうコードに起こすかを考えるほうが好きみたいです。まぁ理論・実装ときれいに分けられるわけではないので結局両方をやる必要があるわけですが、そういう意味で今回のプロジェクトは @nimdanaoto に理論部分を全て投げられたので非常に楽でした。

あと未踏コミュニティについて多少Twitterなどで議論があるみたいですが、任意のコミュニティは閉鎖的になりがちというか、独自の文化を持つものなんじゃないかなぁと第三者的に考えています。真面目に考えていないのでこれ以上書きません。

最後に、VSPを担当していただいた首藤PMと、諸々のサポートをしていただいた未踏事務局の方々には大変お世話になりました。成果報告会のときには身内の謝辞を入れられなかったので、この場を借りて感謝申し上げます。ありがとうございました。

]]>
https://anqou.net/poc/2020/03/29/post-3194/feed/ 0
自分流好きな酒TOP10 https://anqou.net/poc/2020/03/29/post-3222/ https://anqou.net/poc/2020/03/29/post-3222/#comments Sun, 29 Mar 2020 10:12:55 +0000 https://anqou.net/poc/?p=3222 春分も過ぎ、七十二候で言う桜始開の文字以上に京都の桜も咲いてきましたが、桜と言えば花見ということで、みなさんお酒は好きですか?僕は好きです。具体的には日本酒とビールが大好きです。

お酒って色んな種類があって、それ以上に人の好みは様々で、だからこそ楽しいんですよねきっと。自分の場合は日本酒は基本的には甘口が、ビールは辛口だったり渋みのあるのとかが特に好きですね、そこまで種類飲んだこと無いけど。

つまり何が言いたいかというと、タイトル通り今まで飲んだ中で自分が好きだと感じた酒を順に紹介するだけです。ワインやウィスキー等の洋酒は基本肌に合わないので入っていませんが悪しからず。

第10位 マグナムドライ 本辛口

第10位はサントリーのマグナムドライ 本辛口です。これは近くのスーパーでずっと売ってて、アサヒの銀色のやつとかより断然安くてよく買っていたやつですね。名前通り辛口のビールで、から揚げや餃子を食べるときはいつも飲んでいました。少し前にスーパーから消え、リカマンでも見当たらなかったので最近ご無沙汰しています。どこかで見かけたら教えてください。無いならアマゾンで箱買いします。

第F位 とろこく♥桃姫

10進法でいう第15位は、和歌山は中田食品の梅酒、とろこく♥桃姫です。桃果汁が十二分に入れられておりとても濃厚な桃を味わえるため、昔は梅酒好きの友人とリカマンでよく買って飲んでいました。おそらく人生で最初にジャケ買いした酒で、その後ハマったうちの1つですね。この後もこのパターンの酒が2,3本出てきます。

第E位 Corona Extra

このご時世で言うのもアレですが自分はコロナビールがとても好きで、今も家の冷蔵庫に少しキープしています。とはいえ初めて飲んだのはつい最近の事、11/9,10に開催されたTHE IDOLM@STER CINDERELLA GIRLS 7thLIVE TOUR Special 3chord♪ Funky Dancing!で連番者の高校同期と「ナ太郎声付いたしブラジル料理でも食べるか」と言いながら入った店で存在を知りました。コロナはメキシコのビールですが、南米の謎の郷土料理やハンバガとよく合っておりすぐに好きになりました。特に店で買ったときは画像のようにライムを瓶の上に刺して出されるため、それを入れて飲むと酸味と少しの渋みが合わさり、格別の味へと昇華します。ライム、リカマンとかその辺で売っていたら教えてください。

第D位 桃の滴

第13位は京都は伏見の特別純米酒、松本酒造の桃の滴です。お察しの通りジャケ買い酒ですが、記憶が正しければ比較的飲みやすく味わいもあって、食中酒としてよくハマる日本酒でした。近くのリカマンで売ってたんでまた気軽に買いに行きたいですね。京都に住んでしばらく経ちますが実は未だに伏見の酒蔵に行ったことが無いため、もし行く予定があれば気軽に声をかけてください、特に酒蔵開きのタイミングで。

第C位 reijin ロゼ・スパーク

第12位は長野は諏訪の酒蔵、麗人酒造のreijinです。日本酒ではあまり見ないスパークルで、ピンク色を天然由来の成分からだしているそうです。その色合いと日本酒度-50というインフレした甘さ、そして低いアルコール度等から女性向きとも言われていますが、甘い口当たりと炭酸の刺激を日本酒の風味で包んだ味わいは大変美味で男女問わずおすすめできます。諏訪は諏訪五蔵と呼ばれる5つの酒蔵が密集しており、また試飲等も気軽に勧めてくれる蔵が多いため、是非一度行ってみてほしい場所です。

第B位 老松酒造 黒鬼

第11位は大分の酒蔵、老松酒造の黒鬼です。2日前に大分の居酒屋で飲んだ地酒で、とり天や椎茸との相性が抜群の楽しいお酒でした。地酒の一番の楽しみ方はその地域の名産品と食べることだという思想をしているので、その想い出補正も踏まえてこの順位です。とはいえ実際キレのある辛口で食中酒として完璧なので、また機会があれば飲んでみたいですね。

第A位 奥飛騨 純米吟醸 無濾過

第10位は岐阜は飛騨の酒蔵、奥飛騨酒造の奥飛騨 純米吟醸 無濾過です。どうして後置修飾子がこんなに付いているかというと、基本的に店名と同じ銘柄の酒は色々な種類があるというのと、奥飛騨はこれ1本しか飲んだことが無いからなんで、多分純米大吟醸とかの方が美味しいと思います高いけど。1年以上前に飲んだっきりなので記憶が曖昧ですが、ふくよかでどっしりした味わいと香りが楽しめる、辛口よりの酒だったと思います。カタログスペック見た感じアルコール度も17.5%と日本酒にしては比較的高いので飲みごたえのあるヘビー級日本酒ですね。思い返すと飲みたくなってきたのでそのうちリカマンで買ってきます。

第9位 duvel

第9位はベルギービールで(詳しくないから知らんけど多分)一番有名なゴールデンエール、duvelです。デュベルって読むらしいです。歴史とか意味合いとか見ても面白いと思うんでググってください。これはリカマンでフラッと買った酒なんですが、買った動機としてはとある先輩に「ラガービールもいいけどエールビールも美味しいよ」と教えてもらったからですね。最初グラスに注いだ時に泡がいつまでも消えなくて形を保っていて、これが外国のビール……!ってなった記憶があります。味は、なんというか飲みごたえのあるビールで……上手く説明できないので詳細は自分で飲んで確かめてみてください。調べたら温度によって味わいが変わるって書いてるしいつか色々試してみたいですね。

第8位 カネナカ

第8位は山口は中島屋酒造場の純米酒、カネナカです。日本酒度+6と比較的高いのですがそれを感じさせないくらい深い味わいを楽しめる酒で、鍋や煮付けとかと合わせて飲んでいました。とにかく飲んでいて楽しいお酒で、また飲みたいとすぐに思える酒でした。アマゾンで調べたら送料かかる商品しかないためしばらくは買わないと思いますが。
ちなみにこのカネナカと第2位に紹介する日本酒はsaketakuというサービスで届いたものです。自分は月2本を12ヵ月頼んでランクインしたのがその内2つなので、まぁお金に余裕があるなら是非試すと楽しいサービスですね。お酒以外に色々付いてくるので損はしないと思いますよ。

第7位 京千歳 純米酒

第7位は京都は松井酒造の酒、京千歳 純米酒です。こちらも純米吟醸や大吟醸もあるのですが、純米酒しか飲んだことが無いのでこれを紹介します。どちらかといえば甘口の酒で、ふわっとした甘さを感じれる自分好みの酒でした。実は8位のカネナカとどちらが上かひたすら悩んで飲み比べたのですが、決め手は自分が甘口好きなことなので、辛口の味わいも欲しいという人ならカネナカの方が美味しく頂けるかもしれません、知らんけど。個人的な話ですがこの酒造が徒歩5分の場所にあるのを知って気が向いたら気軽に行ってみようという気分になってます。

第6位 君が袖振る流氷浪漫

第6位は北海道は網走の地酒、君が袖振る流氷浪漫です。この日本酒は高校同期と網走に旅行した時にジャケ買いしたもので、飲みやすく味わい深く、飲み込んだ後の残滓と余韻がひたすらに幸せな日本酒でした。網走の地酒と言いましたが、実はこれを昔作っていた酒造は潰れており、少し前に地元民の要望?でこの日本酒をまた作ろうとした結果、現在は網走のわき水を汲み道央の金滴酒造というところで作り、網走市内でのみ販売されているそうです。なんというかネット上での情報が著しく少ない日本酒で、正確な商品名は「君が袖振る」だとか、地元の人は「君が袖」と呼んでいるとかよく分からないので、確かな情報を知っている人は教えてください。あと網走に行く用事のある人は倍額出すので是非4合瓶2,3本買ってきてくださいお願いします。

第5位 金陵 特別本醸造

第5位は香川は金陵酒造の日本酒、金陵 特別本醸造です。金陵は一応吟醸と純米酒も飲んだことがあるのですが特別本醸造の味わいが一番好きで、これが人生で初めて”別格”だと思った日本酒ですね。冷やで良し燗はなお良しな酒で、口の中に広がる幸せ成分をダシの染みた料理と噛み締めるのが最高に気分のいい酒です。よくある日本酒の上位互換のようなものだと思っているので、特に好みがわからない人に一番おすすめしたいです。にしてはだいぶ甘口寄りかも。

第4位 〆

第4位は諏訪は横笛の本醸造酒、〆(けじめ)です。圧倒的な名前のかっこよさにより入店2分でジャケ買いした日本酒で、画像の通り超辛口とか書かれていたらそりゃ気になって買っちゃうよね。カタログスペックの日本酒度+9の通り最高に辛口で透き通るような切れ味を持っており、喉を貫いた後に残る旨味を感じながら酒が回るのを楽しむのが好きです。お察しかと思いますが自分は諏訪の酒に完全にドハマりしているので山梨へ行くついでにでもご一緒しませんか?諏訪五蔵巡って片倉館の千人風呂浸かって立石公園で諏訪湖に映る夕日眺めつつワカサギの甘露煮肴に〆で優勝しようや……

第3位 黒櫻井

第3位は鹿児島の焼酎、櫻井酒造の黒櫻井です。言うまでもなく一升瓶でジャケ買いしました、はい。一般に日本酒は北の方が、焼酎は南の方が美味いという至極雑な評価基準があるんですが、日本で指折りの南方にある櫻井酒造の焼酎は本当に甘く豊かな香りを感じれて美味しかったです。他に紅櫻井と造り酒屋櫻井を飲んだことがあり、それぞれ違った風味で楽しめるのですが、黒櫻井の風味が最も性に合っていました。紅櫻井はさつま芋の風味がし、造り酒造櫻井は比較的飲みやすいのですが、想い出補正かもしれませんが黒櫻井が一番香りが華やかで腑に落ちる味のように感じます。まぁ全部アマゾンで適当に頼んだものなんで、保存状態や期間で違ってる気もしますが、とにかく黒櫻井が今まで飲んだ焼酎の中で最も好きだよ、ちゃま。

第2位 仙臺紅屋長九郎 大吟醸原酒

第2位は岩手は岩手誉の日本酒、仙臺紅屋長九郎(せんだいべにやちょうくろう) 大吟醸原酒です。名前の圧がヤバすぎて飲む前から美味いお酒って素敵ですよね。黒櫻井で少し話した通り雑な評価基準として北(というか寒い地域)の方が日本酒は美味しいとされているため、期待が無限に高まります。こちらが前述のsaketakuの酒で、第7回目ということで入手困難な幻の日本酒として届いたものです。精米歩合40%の大吟醸でさらに原酒ということでまぁ震えるよね。ちなみに公式サイト見た感じ仙臺紅屋長九郎って純米生貯蔵と大吟醸生原酒があるっぽいけど大吟醸原酒は見当たらないんで君が袖よろしく地元でしか手に入らないはずの物なんですかね(にしては大吟醸生原酒の方が多分美味しい気もするけど)、誰か詳細をご存じの方は教えてください。
さて長々と飲まずにわかることを書き連ねてで、実際味は?って思っていたと思うんですが、上品な味わいでひたすら美味かったということ以外覚えていないんで、実際に飲んでみて下さい。あと買ったら僕にも飲ませてくださいお願いします。

第1位 翠露 純米大吟醸 無濾過原酒 生詰 磨き39

栄光の第1位はやっぱり諏訪の酒、舞姫の翠露 純米大吟醸 無濾過原酒 生詰 磨き39です。順に説明すると、純米大吟醸ということで米(このお酒の場合は山田錦)を50%以上(というか書いてある通り39%残るまで)磨き、それと米麹と水だけで醸造し、雑味等を取り除く操作である濾過を行わず、アルコール調整のための加水をほとんどせず、貯蔵前の1度しか火入れをしていないお酒ということです、なるほどわからん。
それで味なんですが、滑らかな口溶け、ストンと喉を通るやさしく感触、常に感じる誇り高い香り、そして癖無く飲みやすい一方舌にねっとり纏わりつく旨味、自分の思う甘口の日本酒の完成形だと思っています。通販でも買えるんですが冷蔵必須なのもあって高いんで、また諏訪に寄れる用事ができたときにでも買いたいですね。

 

以上、自分の好きな酒TOP10を発表しました。最初は本当に10種類だけ選ぶつもりだったんですけどね、気づいたら増えちゃったよね。とりあえず総評としては、日本酒に関しては奥飛騨や金陵、京千歳などがおすすめで、富豪の方は翠露とか仙臺紅屋長九郎を僕に買ってくださいって感じですね、櫻井は自分で買うので。桃の滴やduvel、奥飛騨はリカマンで基本売っているので(奥飛騨は時期にもよるかも)、気軽にちょっと高い酒を飲みたいならその辺りがおすすめです。

最後になりますが、皆さんはどんなお酒が好きですか?せっかくですし銘柄だけでも是非コメントしていってください。

]]>
https://anqou.net/poc/2020/03/29/post-3222/feed/ 3
2020年春季投稿大会のお知らせ https://anqou.net/poc/2020/02/17/post-3156/ https://anqou.net/poc/2020/02/17/post-3156/#respond Mon, 17 Feb 2020 07:39:47 +0000 https://anqou.net/poc/?p=3156 みなさんこんにちは。ご機嫌いかがでしょうか。艮鮟鱇です。暑いんだか寒いんだかよくわからない気候にてんてこ舞いです。

さて2020年春季投稿大会を下記の日程で実施します。著者の方々におかれましては、ぜひ参加して頂けると幸いです。

  • 3月29日(日)00:00〜23:59
  • フリートピック

なお以前にも書きましたように、新規著者は随時募集中です。参加したい方は、鮟鱇にカレーでもおごって面識をつくってから、Twitterなどでご連絡ください。

投稿大会ってなんだ

著者陣が記事を投稿して楽しむ大会。ちょっとしたお祭りです。普段はあんまり投稿しない人も含め、できれば全著者による記事投稿が見られたら良いなぁと思っています。もちろん私も何か書きます。

質問などありましたらコメント欄にどうぞ。

]]>
https://anqou.net/poc/2020/02/17/post-3156/feed/ 0