Successfully reported this slideshow.
Your SlideShare is downloading. ×

私とOSSの25年

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 48 Ad
Advertisement

More Related Content

Slideshows for you (20)

Similar to 私とOSSの25年 (20)

Advertisement

More from MITSUNARI Shigeo (20)

Recently uploaded (20)

Advertisement

私と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

×