Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

私とOSSの25年

早稲田大学情報理工学科講演会 20210515

  • Be the first to comment

私とOSSの25年

  1. 1. 私とOSSの25年 2021/5/15 早稲田大学情報理工学科講演会 光成滋生
  2. 2. • 自己紹介 • 会社紹介 • 普段の生活 • プログラミング歴(昔話) • 午後のこ~だ • 数学から暗号へ • 楕円曲線とペアリング • 関わっているプロジェクト • Xbyak • Intel oneDNN • ブロックチェーン • スーパーコンピュータ富岳 目次 2 / 48
  3. 3. • サイボウズ・ラボで主に暗号と最適化関係のR&D • Twitter : @herumi • GitHub : https://github.com/herumi/ • 資料 : https://slideshare.net/herumi/ • 主な活動 • OSS(オープンソースソフトウェア)を介在した 様々なプロジェクトとのゆるやかなつながり 自己紹介 暗号研究 ブロックチェーン Intel oneDNN スーパーコンピュータ富岳 Xbyak 3 / 48
  4. 4. 会社紹介
  5. 5. • チームワークあふれる社会を創る • kintone • 開発の知識がなくても業務に合わせたシステムを作成できる • サイボウズOffice・Garoon • スケジュールやワークフローの情報共有を支援する • 累計12万5千社の企業 • 1千万人ユーザ • クラウドサービス基盤 • 自社開発&運営 • データセンターも国内 サイボウズ 5 / 48
  6. 6. • 情報がオープン • 経営会議を含むほとんどの議論が自社ツール上で行われる • 横からつっこみ・質問・提案可能 • パソコン・モニタ・キーボードなどの開発環境の支援 • 電子書籍を含む書籍の購入手続きが簡単 • 「○○買ってください」と書き込むだけ • 社内勉強会や社外活動の支援 • より長く働ける環境 • 働き方を柔軟に選択可能(ワーク重視やライフ重視など) • (男性も)育児休暇や子供の送迎時間などを取りやすい • 新型コロナ前から在宅勤務可能 詳細 : https://blog.cybozu.io/entry/2020/10/13/124546 社内環境・風土 6 / 48
  7. 7. • サイボウズの研究開発部門(子会社) • 長期的な視点で自分でテーマを決めて研究・開発 • 自分の研究開発したOSSの著作権は原則個人に帰属 • https://cybozu-oss-policy.readthedocs.io/ja/latest/copyright.html • 評価 • 論文や特許の数はカウントしない • 社長曰く「社会に貢献しているかどうか」が重要 • 詳細 : https://cybozushiki.cybozu.co.jp/articles/m005323.html サイボウズ・ラボ 7 / 48
  8. 8. • 学生支援制度 • https://labs.cybozu.co.jp/youth.html • 学生が作りたいものをサポート • 成果物は個人に帰属 • 奨励金制度あり • 去年・今年はフルリモート • 去年で10年経った • 若干名募集中! サイボウズ・ラボユース 8 / 48
  9. 9. • 研究や実装 ; 9割前後 • OSSの対応や開発をしたり、論文や資料を読んだり • 他組織との打ち合わせ・論文執筆など • 専門委員会、論文査読、C++WGなど少々 • ラボユース ; 1割前後 • 定例ミーティング・設計の相談やコードレビューなど • 本社との関わり ; たまに • 暗号・セキュリティ講義 • 本社製品のトラブルサポート(最近は殆ど無い) • サイボウズOfficeの問題→Linuxのバグを見つけてパッチ作成 • Garoonの問題→PHPのバグを見つけて対策 私の普段の活動 9 / 48
  10. 10. • モチベーションの維持 • 基本的にテーマややることを全て自分で決める • 指示されないので短期目標と長期目標設定が大変 • 気が乗らないときは休む • インプットとアウトプットのバランス • 気持ちの管理 • オン・オフの区別があまりない • 有休とって開発してしまうこともしばしば • あるテーマで疲れたら別のものにスイッチ • 体調管理 • もう1年以上出社していない完全引きこもり • 毎朝1時間前後ウォーキング・ジョギングなど20年以上 自分のコントロール 10 / 48
  11. 11. プログラミング歴
  12. 12. • 小学6年生 • ポケコンPC-1246 • ユーザメモリ約900バイト • BASIC • 中学3年生 ; FM-77AV20(8ビット) • 大学生 ; FM-TOWNS(32ビット) • まだBASIC • 大学2回生 • Cコンパイラ(3.5万円); 当時コンパイラは買うものだった • 修士1年 • 80386用アセンブラ(5.5万円) ; 当時アセンブラは買う(略 パソコン歴 12 / 48
  13. 13. • 『Oh! FM』(パソコン雑誌) • 田舎ではこれしか情報源が無い • 周りに知ってる人が誰もいない • 6809や386のアセンブラ、言語作成、 数値計算、OS、ハードウェアなど • 意味が分からなくても何度も読み返す • 開発環境やマシンを持ってなくても • 『フリーソフトウェアコレクション』 • FM-TOWNS用 • ユーザが作ったソフトを集めて富士通が安価で提供 • ソースコードが公開されているものが多かった 影響を受けたもの(1/2) 13 / 48
  14. 14. • FM-TOWNSのML(メーリングリスト) • 質問したら親切にいろいろ教えてくれるコミュニティ • Linux • 『Linux + JE4』(1996年購入) • メモリ2MBでHDD無しでもCD起動可能 • 起動に5分ぐらい待つけど • kernel 1.2? • コンパイラやアセンブラがついている! • 画像元 http://solan2.pro.or.jp/~fuji/computerbooks/linux/linux.laser5.html • いろんなものがソースで配付されていて自分でbuild • 自分が作ったものはソースを公開する気持ちに 影響を受けたもの(2/2) 14 / 48
  15. 15. MP3エンコーダ
  16. 16. • MP3エンコーダ • CDの音声データをMP3に変換するには(当時) • CDデータをWAVファイルとして取り出してディスクに保存 • WAVファイルをMP3ファイルに変換する • 変換に一晩掛かることも • 私のHDDが約80MBだったので1曲(50MB)しか入らない • 知人と高速なエンコーダを作り始める • MLで知り合った人のお誘い • FM-TOWNSとWindowsの両方で動作するもの • 既存ソフトウェアを、出力は変えずに高速化する方針で 午後のこ~だ(1998~) Windows版がこうだとは 私は長らく知らなかった 16 / 48
  17. 17. • SIMD対応のCPUが登場 • SIMD : 複数の整数・浮動小数点数をまとめて処理する命令 • 1997年IntelのMMX Pentium ; 整数のSIMD • 1998年AMDのK6-2 • 専用命令3D Now! • 続々登場する様々なSIMD命令セット • IntelのSSE, SSE2, SSE3, SSSE3, AMDのEnhanced 3D Now! • いろいろな協力者が現れる • Linux, BeOS, FreeBSD, OS2など開発者のOSがばらばら • 最終的には処理時間の9割以上をasm化 高速化への道 FM-TOWNSにK6-2を 無理やり載せて使う アセンブラは当然非対応なので 自分で3D Now!に対応させる TOWNS HC+K6-III レジスタの中身を見る デバッグツールも作成 17 / 48
  18. 18. • 手動マージからバージョン管理システム(CVS)へ • 初期 : メールで来たコードを私が手動でマージ(辛い) • 他人のコミット差分メールを眺めるのはよい勉強 • 仕事でPM(プロジェクトマネージャ)を担当したときも グループの進捗や問題点が肌感覚で分かる • 継続的インテグレーション(CI) • コード変更をサーバにpushしたら ビルドと自動テスト • 結果が不正ならメールで通知 • 1clkでも減らす競争 • 遅いと他のメンバーに上書きされて悔しい 開発スタイルの向上 コミット ビルド &テスト 結果 採用 18 / 48
  19. 19. • 複数の環境で確認することの重要性 • コンパイラの癖・バグや環境依存なものを実感 • 同じ命令を実行してもOSによって結果が異なることも • FPUの演算モードやエラーハンドリングの違い • 浮動小数点数の処理方法 • 精度が不要なところでは余計なものを「はしょる」 • sqr/inv/exp/logなどの計算方法 ; 未だに使える・使ってる技術 • 量が質を転化する • オンタイムで「CD→リッピング→エンコード→MP3」可能に • 広く使われた • 「窓の杜金賞」「オンラインソフトウェア大賞」 • いろいろなリッピングソフトにバンドリングされる よかったこと 19 / 48
  20. 20. • ブログ • 最適化の試行錯誤の経緯など • SIMDプログラミングの方法 • 後に「勉強になりました」と言ってもらえたことも • その後、勉強会を主催したり参加したり • x86最適化勉強会 2011~2018 • https://github.com/herumi/x86opti • テキスト(無料PDF) • 『パターン認識と機械学習の学習 普及版』 • https://herumi.github.io/prml/ • 『クラウドを支えるこれからの暗号技術』 • https://herumi.github.io/ango/ 分かったことをアウトプットする 20 / 48
  21. 21. 数学から暗号へ
  22. 22. • 物理や数学を中心にいろいろ勉強 • 電磁気学/解析力学/量子力学/特殊・一般相対性理論 • 関数解析/微分幾何/ゲージ理論/代数幾何/アーベル多様体 etc. • 楕円曲線が面白い • 暗号に使うらしい • 1999年京都工芸繊維大学(当時)笠原先生のセミナーに参加 • 暗号のことを教えていただく • 私は楕円曲線やペアリングなどの数学を解説 • 先生のご自宅でひたすら勉強会を定期開催 • 「楕円曲線のペアリング」を使った暗号技術を考える • 研究者になるのは諦めて就職 • 音声・動画のコーデックや組み込みLinuxなどを扱う 大学 22 / 48
  23. 23. • 就職はしたけど暗号の勉強は細々と続ける • いろんな大学の先生と共同研究 • 2004年IPA未踏スーパークリエータ • ペアリングを使った放送型暗号の実装 • 2005年IPAの依頼でToyocryptの解読 • その後「F5.PDF」というメールが届く • F4, F5は解読に使うグレブナー基底計算アルゴリズムの名前 • https://www.ipa.go.jp/security/enc/pressrelease/press_IPA-SMW_20050926.html • 経産省の「情報化月間推進会議議長表彰」受賞 • じっくり研究的なことをしたくなってきた • 2007年サイボウズ・ラボに転職 暗号研究 光成さん、F4.PDF送ったから作って えっ?何がなんだか分かりません 23 / 48
  24. 24. • データを暗号化したまま処理可能な暗号方式 • 産総研、東大、早稲田大学などとの共同研究 • ユーザのプライバシーの向上 • https://herumi.github.io/she-wasm 準同型暗号 お弁当購入 購入せず お酒購入 * * 購入せず * * 暗号文を送信 お菓子 ジュース お酒 お弁当 A * * * * B * * * * C * * * * ... * * * * 暗号文のままクロス集計 お弁当購入 購入せず お酒購入 80 20 購入せず 10 30 復号 クラウドサーバ 集計後のデータ解析 24 / 48
  25. 25. XbyakとIntel
  26. 26. • 既存手法 • 組み込み関数 • 簡単だが期待通りのアセンブリコードにならないことも多い • インラインアセンブラ • 処理系依存・文法が嫌い(個人の感想) • 外部アセンブラ • 再利用しづらい • macro, define, if elseなどの擬似命令が昔(40年?)のまま?? • C/C++との連携がしづらい • 自分が使いたいアセンブラを開発 既存のアセンブラの不満点 26 / 48
  27. 27. • 見かけはpure C++ • C++の関数としてクラス化・ライブラリ化がしやすい • JIT(実行時)コード生成 • CPUの特性に応じた柔軟な最適化が可能 • 既存のアセンブラはアセンブル時に値やコードが確定 • C/C++と連携しやすい • 外部ツールに頼らずC++で完結する • 2007年公開 • 自分のプログラム開発で使う • 暗号ライブラリの開発など • まれにゲームエミュレータなどで使われるがマイナー • そもそもアセンブラというカテゴリがマイナー Xbyak 27 / 48
  28. 28. • 2016年4月GitHubでAVX-512に対応してという依頼 • AVX-512はIntelの当時最新のSIMD命令セット • まだその命令を実行できるCPUが世の中に無い • Knights Landing(一般向けじゃない)は2016年6月 • Skylake-Xは2017年 AVX-512対応 そうだ、すぐに使いたい 深層学習ライブラリCaffeで使うつもり 将来的には対応したいけど そんなに早く使いたいの? 分かった。AVX-512のフォーマットから勉強始めるよ 28 / 48
  29. 29. • AVX-512のマニュアルは1000ページ以上 • 新規レジスタ • フォーマットが複雑怪奇 • 理解するのにかなり時間を費やした • 最初はマニュアルのバグも • どうしても分からなかった部分が次版で修正されていた • 3カ月掛かって対応 • GitHubの依頼者はIntelの人だった • そこから奇妙な関係が始まる 大変だった 29 / 48
  30. 30. • Intelが新しいCPUを発表したときの主な流れ • IntelがCPUのスペックを公開する →各種ツールが対応する→CPUが発売される • GitHub上でXbyakに対応依頼やパッチが送られて来る • 確認手段がマニュアルのみで辛いことが多い • Intelが独自にXbyakにパッチを当てることも • そのパッチが間違っていたので 「本家が対応したからそちらを使って」とお願いした 個人が企業をサポート? パッチのバグを直して4FMAPSに対応したけどOp/En T1_4Xはちゃんと動いてる? 自分では確認できない Intelの社内バージョン(未公開)の エミュレータでチェックしたよ 30 / 48
  31. 31. • Twitterでマシン欲しいなと つぶやく • 2CPU(100万円x2)112コア サーバを送ってくださる • Intel AMXの発表のとき • 新CPUのスペック公開と同時に パッチが来た • GitHubのissueを眺める • AMXって何? 全然知らないと焦る • え、公開されたばかり??? • gcc, clangよりも先 嬉しいことも 31 / 48
  32. 32. • iWAPT 2018 • 自動パフォーマンスチューニングの国際ワークショップ • Intelの招待講演 • http://iwapt.org/2018/iwapt2018-invitedtalk.html#talk1 • 内容はXbyakの紹介と使い方(ありがたい) Intelの人が宣伝してくれる 32 / 48
  33. 33. • https://github.com/oneapi-src/oneDNN • Intelが提唱する深層学習(DNN)のための クロスプラットフォームライブラリ • DNNに必要な基本演算を提供 • IntelだけでなくAArch64, NVIDIA GPUなどもサポート • PyTorch, Tensorflow, PaddlePaddle, ONNX等のアプリで利用 画像元 https://software.intel.com/content/www/us/en/develop/tools/oneapi/ai-analytics-toolkit.html Intel oneDNN 33 / 48
  34. 34. • 2021年4月7日のItmediaの記事 • Intelが「第3世代Xeonスケーラブルプロセッサ(Ice Lake)」 を発表 最大40コアで処理能力を向上 oneDNNのCPUエンジン この部分にXbyakが利用されている 画像元 https://www.itmedia.co.jp/pcuser/articles/2104/07/news122.html 34 / 48
  35. 35. ブロックチェーン
  36. 36. • ペアリング暗号の研究は1999年から 実装は2003年の未踏IPAから継続していた • 何度か世界最速実装して論文投稿 • 当時高速な実装のソースを公開する人はあまりいなかった • 私ぐらい? • 私のソースを 改良してレコード更新 • でもソースは非公開 • それって... • http://sac2013.irmacs.sfu.ca/slides/s1.pdf • 2010年に(理論の話で)IEICE論文賞受賞 ペアリング暗号の研究と開発 Xbyakによる 私の実装 36 / 48
  37. 37. • ペアリングを使ったゼロ知識証明の一種 • Aさんがある知識wを持っていることを Bさんにその知識wを教えずに納得してもらう暗号技術 • 2014年にzk-SNARKの提案者からパッチと対応依頼 • https://github.com/scipr-lab/libsnark • 当時Zcashなどで実験的に利用? • ビットコイン ; 「AがBにC円送った」という情報は公開 • Zcash ; 「○が△に□円送った」としたい • 中身は教えないがお金の動き inputX + inputY = outputZ + outputW は成立してほしい zk-SNARK 37 / 48
  38. 38. • 2016年7月BLS署名の実装の依頼 • 当時まだ数名? • BLS署名 ; ペアリングを使った高機能な署名 • 署名を使った多数決や複数個の署名を一つに集約したり可能 • そんな面白い使い方が。使ってもらえるならありがたい。 • 2019年Zurichの研究所にお宅訪問(議論のため軟禁状態?) • 2021年5月 ; 200人近いメンバー & 3拠点 DFINITY 2017年にP2Pレイヤーのデモ 38 / 48
  39. 39. • 2019年Road to Devconという 勉強会で発表 • そのときDevconというのを知る しかしチケットは既に売り切れ • 主催者にお願いして手配していただく • ありがとうございました • 2019年Devcon 5 • 大阪開催参加者数千人? • EthereumのPrysmatic Labsの人に会って使ってもらうことに • 他にEthereum JS VM (Node.js), AZTEC protocol, Chainsafe, Harmony.ONE, 0chain, etc. • いろいろなところで使われてるらしい • 困ったときだけGitHub issueやメールが来るので詳細不明 BLS署名を使うプロジェクトの増加 Devcon 5 2019 39 / 48
  40. 40. • サポートが大変 • Go, Java, C#, Node.js (WebAssembly), Rust, etc. • 今年の5月連休はIBMのメインフレームLinuxONE対応をしてた • とは言え、いろいろな言語・環境の勉強になる • 私のライブラリに脆弱性を見つけると賞金が出ることが あるらしい • 学生の質問メールもできるだけ対応 • 日本の学生からはほぼ皆無(残念) • ウイルスメールがたくさん来る • ピーク時は1通/1分ぐらいで何日間も • なぜかフィルタリングされず(最近は大丈夫) 嬉しいけど困ったことも 40 / 48
  41. 41. スパコン
  42. 42. • A64FX • 富士通が開発した富岳のCPU • Arm v8-A命令セット(スマートフォンとほぼ同じ)+SVE • SVE ; SIMD命令セット • A64FXでは32個の512ビットSIMDレジスタを持つ • Intel AVX-512とよく似た構成 • ある日の富士通での会話(想像・伝聞) 2019年富士通からコンタクトが来る スーパーコンピュータ富岳 富岳でもDNNを使いたい GPUではなくCPUベースなので Intelの手法を調査 内部でXbyakというものを 使ってるらしい その作者知ってる! (Xbyakってキワモノ系と 思っていたらこんなところに...) 42 / 48
  43. 43. • IntelのoneDNNを富岳に移植 画像元 https://www.hpci-office.jp/invite2/documents2/meeting_A64FX_210317/TuningTechMeeting_oneDNN.pdf 富岳用DNNライブラリの構成 Xbyak for A64FX 43 / 48
  44. 44. • Xbyak→Xbyak_aarch64 • CPUが異なるので富岳用のJITアセンブラが必要 • クラス設計は概ねXbyakを継承 • レジスタや個別メソッド・文法の方針を議論 • 富士通が実装 • 私もデバッグやリファクタリングでサポート • GitHubのオープンな場で作業 • やりやすくて快適 • ただしXbyak_aarch64だけでは動かない • 何故? 移植の概略 44 / 48
  45. 45. • JITアセンブラの移植だけでは動かない • 「AVX-512コードを生成するコード」[AVX]を 「A64FX SVEコードを生成するコード」[SVE]に修正する必要 • 量が膨大なので大変 • AVX-512命令とSVE命令を熟知して • Intelの最適化コード生成部を理解し • それをSVE用の最適なコードを生成するコードを作る必要 • 速度的にクリティカルな部分は富士通が実装 • それ以外の一部のコードは私も担当 • Intelの本家oneDNNにmerge • Intelの公式レポジトリにライバルCPU用のコードが入る • 個人的にかなり感動 コード生成部の翻訳 45 / 48
  46. 46. • Xbyak_translator • [AVX]を[SVE]に自動変換するライブラリの開発 • 富士通の力業 • 移植の手間が大幅に減る • パフォーマンスは手作業に比べて劣るがうまく行くときも • 詳細はhttps://blog.fltech.dev/entry/2020/11/18/fugaku-onednn-deep-dive-ja 富士通のよりアグレッシブな戦略 46 / 48
  47. 47. ざっくりとした年表 '96 '98 '99 '00 '01 '04 '05 '07 '10 '14 '16 '17 '18 '19 '20 '21 コーデック 午後のこ~だ TwinVQ, MPEG etc. 暗号 ペアリングの研究・実装 Toyocrypt BLS署名 準同型暗号 zk-SNARK DFINITY Ethereum, etc. 10年 Xbyak Xbyakの実装 富岳版Xbyak Intel caffe, MKL-DNN, oneDNN 10年 欲しくなった ペアリングもXbyakも使われるようになるまでざっくり10年 asm, Linuxに触る 富岳版DNN Xbyakによる新規実装 未踏IPA DAPDNA 47 / 48
  48. 48. • OSSの観点から自分の活動の振り返り • 恥ずかしいと思ってもまずはコードを公開してみる • 自分がやりたいことをしつこく長く続けている • ペアリングの研究・実装やXbyak • たまたまよい結果につながった(ことがある) • (書いてないけど)負の面ももちろんある • 声を掛けられたらできるだけ対応している • できる範囲で(自分を追い込みすぎないように) • 教訓的なものはないけれど • 長くやりたいなら体に気をつけよう まとめ 48 / 48

×