「第13期サイボウズ・ラボユース成果発表会」開催

サイボウズ・ラボの中谷です。 今回は2024年3月29日にサイボウズ東京オフィスで開催された第13期サイボウズ・ラボユース成果発表会の模様を紹介します。

サイボウズ・ラボユース

サイボウズ・ラボユースは日本の若手エンジニアを発掘し、育成する場を提供する制度です。インターンと似ていますが、最長で1年間という長期サポートと、テーマをサイボウズ・ラボで設定するのではなく、ラボユース生個人が作りたいものをテーマとする点が特徴です。

今回の成果発表会では、第12期から引き続き活動していた学生も含めて16名のラボユース生が研究開発に取り組んだ成果を発表してくれました。

近年はコロナウィルスの影響でこの成果発表会もオンライン開催が続いていましたが、今回は 2019年の第8期成果発表会以来、5年ぶりのリアル開催となりました。今年度は夏合宿も4年ぶりに開催できたりと、徐々に社会がもとに戻っている手応えがありますね。

また4月12日にサイボウズ・ラボユースのオンライン説明会も予定しています。ご興味のある方はご参加いただけると大変嬉しいです。

発表会レポート

www.youtube.com

今回の発表をそれぞれ簡単に紹介します。

第13期サイボウズ・ラボユース成果発表会

第一部

伊藤 愛香 「ラボユースと私のマイペースな二年間」 (メンター:生田)

伊藤さんは、12期をラボユース研究生として、13期をラボユース生として活動しました。 研究生のときは卒業研究のテーマであった、日常利用を想定したAR空間での情報配置デザインの比較検討についての活動をし、実験手法や評価についてメンターとの議論を重ねてきました。 ラボユース生になってからは、街歩きの体験価値向上のためのナビゲーションアプリの開発に取り組みました。従来の最短経路を表示するナビゲーションではなく、目的地までの街歩きが楽しくなるような体験について検討し、興味があるカテゴリのスポットをできるだけ多く通る道を選択肢として提示するシステムのプロトタイプを完成させました。

重本 玲奈 「紙への手書きとデジタルメディアの利点を融合したメディア体験の提案」 (メンター:生田)

重本さんは、紙への手書きに対するこだわりを持ち、手書きとデジタルメディアとが融合することで新たなメディア体験を創出することを目指して活動しています。 これまで開発していた、紙に手書きをしたストロークをデジタル空間で情報共有可能なシステムをベースに、新たなメディア体験の設計や機能開発をラボユース期間中に取り組んできました。メディア体験の設計に苦労しながらも根気強く取り組み続け、現在は、書籍に対する手書きメモとその情報共有による新たなメディア体験が可能なシステムの開発を進めています。 今後は、開発中のシステムを完成させ、ユーザスタディを通してメディア体験の評価を進めていく予定です。

柏木 力哉 「関数型プログラミング言語の型保存コンパイラ」 (メンター:川合)

高級言語が持つ型情報をコンパイル時にも保存して、型付きアセンブリ言語を生成できるようにします。これによりコンパイルの各段階で型情報を利用したバグの検出や最適化が可能になります。また、相互再起関数を含めた型付きクロージャ変換を考案して実装しています。

今後の課題としては、型保存コンパイルの効率や安全性をさらに改善すること、言語に実用的な機能(データ型、パターンマッチ、多相型)を導入することです。

高名 典雅 「RISC-Vのアドレス変換を可視化する」 (メンター:川合)

ラボユース期間ではRISC-Vエミュレータ「carron」をRustで書きました。rv32imacとrv64imacに対応して合計9000行ほどです。このエミュレータでLinuxを動かすという目標も達成しています。

今回の発表では、RISC-Vのアドレス変換の自作ビジュアライザを紹介しました。これはRISC-Vの低レイヤのプログラムを書いているとアドレス変換がうまくいかなくて苦労するため、設定値が期待通りの動作をしているのか確認するためのものです。このビジュアライザはRust+dioxus+trunkで書かれていてブラウザ上で動作するので、RISC-Vアドレス変換のデバッグの際はぜひ使ってみてください。

福田 優真 「スクリプト言語の開発」 (メンター:川合)

以前よりプログラミング言語の開発に興味を持っていて、ラボユース期間では2つのスクリプト言語を作りました。

一つ目の言語は、前半のモジュール定義部と後半のスクリプト記述部に分離している言語で、直感的で読みやすくなっています。関数定義はScalaライクな構文を採用しています。また関数呼び出しの際はコマンドラインシェルのように引数にカッコをつけずにスペース区切りで書くことも許されており、好きな方を選べます。

二つ目の言語は、Gleamのuse構文やKokaのwith構文に類似したusing構文を持っていて、これによりネストを深くせずに簡潔に書けるようになります。発表では「Minecraftのログを解析して入退室をDiscordに通知」する例を5行で書いて例にしました。なおどちらの言語もRustで実装されています。

今後の展望としては、この2つの言語を統合したいと考えています。

山口 雄翔 「Rustによる自作OS」 (メンター:川合)

ラボユースでは、教育用OSへのNICドライバの実装・Linuxへの移植と、Rustでの自作OSをやりました。今回の発表では、自作OSの件を紹介しました。このOSはx86(32bit)用でエミュレータ(QEMU)で動作確認しています。現在のコード規模は1200行程度で(テスト含む)、キーボード/VGA/UARTによる簡単な入出力とページングができるようになっています。

今後は割り込み処理やマルチタスク、マルチコア対応、ファイルシステム、ユーザプログラム起動などに対応していきたいです。

第二部

阿部 奏太 「自作 RISC-V CPU の高速化」 (メンター:内田)

ラボユース期間で、自作の RISC-V CPU にパイプライン処理やアウトオブオーダー実行の機能を加えました。 これらの機能は CPU の処理をとても複雑にするため、たびたびバグが発生し、その都度乗り越えました。 追加した機能によるクロック数の削減量を計測し、確かに高速化することを確認しました。

櫻井 拓馬 「NAND Only CPU の安定化と高機能化」 (メンター:内田)

NAND という基本的な論理素子のみを使って、ちゃんと動く CPU を作りました。名付けて NLP-16 です。 ラボユースでは NLP-16 の動作の安定化と命令の高機能化を図った NLP-16A を設計・実装しました。

また櫻井さんは実際にNANDゲートで構成したCPUの実機を展示・デモをしてくれました(下の写真の機械全体で1個のCPUです)。

NANDのみで構成したCPU NLP-16A

高棟 雄斗 「Merkle-CRDTを使った分散KVSの実装に向けて」 (メンター:星野)

高棟さんは、Merkle-CRDT を使って分散 KVS を作ってみたいと、まさに今回のタイトル通りのテーマを掲げてラボユースに応募してきました。 Merkle-CRDT についての一番マシだと思われる情報源は arXiv にある Preprint 論文なのですが、これが難解で、設計・実装できそうだという状況になるまでにかなり時間がかかりました。 論文を読むのに慣れていない状況で、やりたいことについて書いてあるのがこの論文だったことは、高棟さんも運が悪い……(一緒に読んだメンターも?)と思わなくもないですが、実装できるところまでこれて良かったです。 今は簡単な CRDT の実装が動くようになったところで、これから分散 KVS に取り組んでいく予定です。

多田 瑛貴 「Rust製Linuxウインドウマネージャ開発を通じた良い設計へのアプローチ」 (メンター:星野)

多田さんは、良い設計とは何かについて本などを通じて学ぶ活動と、ウィンドウマネージャという具体的なソフトウェアにおいて設計の善し悪しを考える活動に取り組んでいます。 ウィンドウマネージャは過去に作ったこともあるということでしたので設計について学ぶ良い題材だったと思います。 一方で Rust は評判が良いので使ってみたいという軽いノリだったので少し心配しましたが、コードを書き始めたら割とすぐに動くものが出来ていたので杞憂でした。 ラボユース活動を通じて、設計の善し悪しについての判断軸を得ることができたのではないかと思います。

小栗 悠太郎 「DBMS自作によるトランザクション処理の学習」 (メンター:星野)

小栗さんは大学の卒業論文に取り組む年度であるにも関わらず、10 月にラボユース活動を開始したチャレンジャーです。 卒論を無事に終えたどころか、国際会議にも論文を投稿しています。 ラボユースでは、SimpleDB という本を教材にトランザクション処理について学んでいます。 小栗さんの専門はベクトル検索ということもあり、今作っている DBMS はトランザクション処理機能に加えて、 ベクトル検索機能を搭載するのが目標だそうです。

第三部

加藤 万理子 「言語モデルは音楽データから自然言語の構文的性質を学習するか?」 (メンター:中谷)

加藤さんは、言語モデルの入力に含まれるどのような知識が単語ベクトル表現として獲得されているのかに興味を持ち、特に音楽データから言語に関する知識が獲得できるかを、実験によって調べました。実験では、LSTMモデルに対して英語、日本語、音楽データ(MAESTRO)、ランダムデータ(Zipf分布と一様分布)で事前学習を行い、英語への転移性能を評価しました。 実験結果は、音楽データの埋め込み表現に句構造などの言語情報が含まれ、これが言語データの埋め込み表現と類似の構造を持つことを示唆していました。単語ベクトル表現の可視化からも、言語や音楽から得られた表現はランダムなデータとは異なることが確認できました。 加藤さんは今後もこの研究を継続し、言語の構造を探究していくとのことです。

西本 晋平 「赤外線リング構造検出に向けた深層学習モデルの開発」 (メンター:中谷)

天文学を専攻する西本さんは、可視光以外の観測データを用いた研究を行っています。今回の発表では、NASA の Spitzer 宇宙望遠鏡で観測された赤外線データから、太陽の8倍以上の質量を持つ大質量星が誕生した際に形成される構造である Spitzer Bubble(赤外線リング構造)を検出する深層学習モデルの開発について報告しました。 SSDというモデルを使用し、観測データから赤外線リング構造の位置を出力するシステムを開発、銀経10.5度から22.5度、銀緯-1度から1度の領域で学習したモデルを用いて推論したところ、多数の赤外線リング構造を見つけることができました。さらに、このモデルをCygnus X(白鳥座の領域)などの他の銀河にも適用したところ、リング構造らしい特徴を持つ天体を検出することができました。 今後もこのモデルの開発を続け、研究を進めていく予定です。

湯谷 承将 「深層学習モデルを用いたウェーブテーブル合成における意味的な音色制御」 (メンター:中谷)

シンセサイザーの音作りは複雑で難しいという課題に着目し、ウェーブテーブル合成に深層生成モデルを適用することで、直感的な音色制御を目指しました。提案手法では、条件付き変分オートエンコーダ(CVAE)を用いて、ウェーブテーブルに対する意味的なラベル(明るさ、温かさ、豊かさ)を条件として生成を行います。 モデルの評価では、再構成精度、条件付け生成の制御性、生成時間の3点に注目しました。その結果、高品質な再構成が可能であり、条件付けラベルに沿った生成ができることを確認しました。また、高いリアルタイム性も実現できました。 今後の課題として、条件付け生成の制御性改善のためのデータ数増加やモデル構成の検討、さらなるリアルタイム性の向上などを挙げていました。 また懇親会では音色をリアルタイムに変更する実機デモも行ってくれました。

「CVAEを用いたウェーブテーブル合成の意味的な音色制御」実機デモ

青木 志穂 「天然変性タンパク質の分子動力学法シミュレーション法における高速処理方法の検討」 (メンター:光成)

天然変性タンパク質とは変性領域と呼ばれる構造的に不安定な部分で、タンパク質の性質に重要な役割を果たすのですが、計算シミュレーションが難しい部分です。 その部分を高速化できないか検討を始めました。分子動力学法シミュレーション法(MD)のコアの部分は実装し、MDに渡す準備の部分もできるだけ自動化しました。 現在、既存システムGROMACSの評価をしていて、GPUのプロファイルに苦戦してるところです。 今後は自分で実装したMDのコアの部分を高速化していく予定です。

斉藤 楽 「SRv6 L2VPNの実装」 (メンター:光成)

従来IPv6のカプセル化が機能ごとに分かれていたのをまとめて、柔軟性と効率性を高めたのがSRv6です。 当初はGoでrawソケットを使って開発を始めたのですが、プログラミングの基礎をきちんと勉強する必要が分かりました。 それで『C言語[完全]入門』をサンプルコードを動かしながら勉強を進めて最後まで終わったので、いよいよネットワークプログラミングに戻ってきたところです。 デバッグ中にパケットキャプチャし続けていたのでパケットダンプを見てある程度構造が分かるようになりました。 今後は本来のSRv6の開発に着手する予定です。

まとめ

この発表まとめからもわかる通り、サイボウズ・ラボユースの活動範囲は非常に幅広く、おのおののラボユース生が自分の好きを追求しています。 今年度もサイボウズ・ラボユースは新たな応募をお待ちしていますので、興味を惹かれましたら説明会へのご参加や応募をご検討ください。