ISUCON14作問後記:ベンチマーカーが正しすぎて盛り上がった話

 

2024年12月8日に開催されたプログラミング競技大会ISUCON(イスコン)。14回目を数えた今回の作問を担当したのは、ポケットサインのエンジニアとして働く3人でした。東京工業大学(現・東京科学大学)デジタル創作同好会(traP)OBという仲の3人に、今だから話せる作問の裏話を聴きました。

(左からポケットサインの澤田=取締役CTO、岸本、大橋)

 

ベンチマーカー作りに大重圧

ISUCONとは「いい感じにスピードアップコンテスト」の略であり、LINEヤフーが窓口となって運営。参加者は、動作が遅いサーバーとサーバーアプリケーションが与えられ、サーバーの挙動を基本的に変えない、ユーザーができる体験を変えないといったルールの下、制限時間内でスピードアップ度合いを競う。14回目となった今大会はポケットサインの澤田、岸本、大橋の3人が作問を担当した。

・参考記事:2年連続ISUCON優勝の東工大トリオが今年は作問 「かかって来い!」

 

ーー作問お疲れさまでした。作問を担当してみていかがでしたか。

岸本:いや、結構疲れましたね。全体の期間としては7月から12月まで5,6カ月はあったんですが、割と締め切り駆動というか。 いちおう何回かリハーサルなどの期日が決められてはいたんですけど、直前にどんどん進捗させるという形になってしまいました。直前にガッと作業するみたいな感じでした。

岸本崇志(きしもと・たかし)

東京工業大学(現・東京科学大学)情報工学系卒業。元traPメンバー。Goバックエンド開発をメインとしつつ、Reactフロントエンド開発、パブリッククラウドk8sの運用保守も行なっている。ISUCON12,13優勝

大橋:ギリギリで、すごいギリギリで生きてるなって感じていました。今回は前日午後6時頃に一応ここで閉めます、となって、その後にもう1回解き直して、出てきた問題を全部修正して回していたら当日の朝になっていました。ただ、「去年(2023年のISUCON13)よりは全然余裕ですよ」ってfujiwaraさん*は言っていましたよね。

大橋滉也(おおはし・こうや)

東京工業大学(現・東京科学大学)traP代表。普段はサーバーサイドエンジニアとして勤めている。 ISUCON12,13優勝

*:さくらインターネット株式会社クラウド事業本部のfujiwara氏(https://x.com/fujiwara)。ISUCONで複数回の優勝経験があり、近年はアドバイザーとして作問チームに参画している。

澤田:去年とかは普通に前日の夜から朝方くらいまでコードを書いてたらしいですからね。

澤田一樹(さわだ・かずき)
ポケットサイン株式会社取締役CTO。株式会社メルカリソフトウェアエンジニア、SOMPOホールディングス株式会社デジタル新規事業会社の立ち上げ、アルゲンタム・コード株式会社CTOを経て、ポケットサイン株式会社を共同創業。SECCON CTF 2018 

International(セキュリティ競技国際大会)準優勝、ISUCON12,13優勝。東京工業大学(現・東京科学大学)工学部卒

ーー作問をやってみて、今まで競技側で出ていたときとの違いや別の魅力は感じましたか

大橋:参加してくれた人たちに楽しんでもらえるかどうかに一番ドキドキしていました。

澤田:なんか、朝にね、岸本さんが「何か文句言われたらどうしよう」みたいな感じでもじもじしていました(笑)

岸本:めちゃくちゃ不安で、楽しんで競技をしてもらえるかプレッシャーもあって…というのも、競技者たちの処理の性能を測るベンチマーカーの実装を僕が担当していたんですけど、ベンチマーカーがきちんと競技性を持って動作してくれるかどうかが、作問の競技としての成否を決めるかなり重要な要素だったので。

澤田: そう。どういうことができると点数が増えるかみたいなロジックを1つ取れたら問題性の大部分はベンチマーカーになる。

大橋:競技の面白さはベンチマーカーが作っているわけですもんね。

・参考:ISUCON14公式イベントレポート

お題は移動手段のマッチング改善

ISUCON14の出題は以下のようなものだった。

  • アプリで呼んだ椅子に座り、自動運転で目的地まで行けるサービス「ライドチェア」がある
  • 椅子を提供するチェアオーナーと、椅子を利用したいユーザーとをアプリ上でマッチングする仕組み
  • 新規登録の獲得に向けて大規模な割引などのキャンペーンを実施中
  • ところが、サーバーにアクセスが集中し大規模なシステム障害が発生
  • お題は「ライドチェアを改善せよ」

澤田:このライドチェアはタクシーとお客さんをマッチングする配車アプリと同じなので、マッチングをうまくやると点数が伸びるという仕組みです。過去のISUCONでも似た出題があった年もあるみたいなんですが、結構珍しい要素ではある。なので、普段と違う競技プログラミングと呼ばれる分野に強い人とかにも活躍の余地があったので、ちょっと違った楽しみ方もできたのかなと思います。

岸本:やっぱりベンチマーカーによるスコアの出し方のロジックを決めるのが大変でした。例年のよくある出題だと、単純にサーバーにリクエストする数とかリクエストしてレスポンスが返ってくるまでの速さをどんどん短くしていけばスコアが上がるんですね。でも今回はマッチングアルゴリズムも取り入れたので、単にリクエストが返ってくる速さだけではスコアを決められないんですよ。いかに効率的に利用者と椅子とをマッチングさせて、効率よく配車を回していくかという評価も必要になるような問題だったので。

大橋:最初は完全に売上だけみたいな得点を付けるように考えていたんですけど、マッチングの部分を加味した配点にするようにしました。あとはベンチマーカー。その参加者には ベンチマークのスコアだけが手がかりになりますから、納得感のいく競技の進行になるよう、何かするごとに安定して着実にスコアが伸びていくようにスコア設計に落とし込んでいきました。その辺りは岸本さんがうまく考えてやってくれましたね。そのおかげで参加者はめちゃくちゃ気持ちよく競技できたんじゃないかと思います。

ーー当日は会場で何をしていたんですか

澤田:ポータルの運用ですね。ベンチマーカーをいっぱい並べて用意しておいて、負荷情報を見ながら手動で増やしたり減らしたりという作業をずっとやっていました。結構、「快適だった」って言ってもらえました。ベンチマーカーを投げるとしばらく待たされてから動き始めるのが例年なんですけど、今回はその辺のリソースを完璧に調整したおかげで、ほぼ待ち時間は無かったと思います。待ち時間をメトリクスを取って計測したら、ほぼ押した瞬間に走り出すという動作をずっとできていた感じです。

大橋:めちゃくちゃ評判よかったですよね。ちゃんと準備していて、 採点のオペレーションもすごくスムーズで、「ポータルチーム偉すぎ」ってなりました。

澤田:プロマネとして、前日はぐっすり眠るというのを仕事にしたおかげです(笑)

ベンチマーカーハック潰しに参加者戸惑い

ーー競技中にプレーヤーから質問を飛ばせるんですよね? 質問は多かったですか

岸本:マッチングの要素を加味していましたし、システム的に今までに無いようなことをやったこともあって、その辺りの質問や仕様の確認みたいな問いがありました。あと、「ベンチマーカーは正しく実装されていますか?」とか「これって、我々じゃなくてベンチマーカーの方が悪いんじゃないんですか?」という質問も来たりして。

大橋:ベンチマーカーが正しすぎるという(笑)

岸本:そうです。ベンチマーカーというのは、ウェブサービスがただ速くなってるかどうかだけを確認するのではなくて、速くなったうえで正しく動作しているかも確認するものなんです。今回作ったベンチマーカーは結構、何て言うんでしょう、正しく動作しているかの確認基準が厳しいというか、チェック項目が割と多かったので、前記のような質問が来たんですよね。それに対して「いえ、ちゃんとベンチマーカーが合ってます」と回答していきました。

澤田:参加者さんからは「ベンチマーカーが例年より遥かに厳しい」という声を聞きました。例年は「ベンチマーカーハック」と言って、ベンチマーカーが細かく見ていない部分(遊び)を狙って点数を上げるという実装もありました。要は、ベンチマーカーが緩いと多少誤差のあるレスポンスを返してもOKでスコアは伸びるというようなことが例年はあったんですよ。でも今回は岸本さんが本気を出したせいで、厳密にチェックしないと何をやっても通らない(スコアが上がらない)というような感じで、結構苦しんでいるチームが多かったですね。

ーーそこは、敢えて厳しくしたんですか

岸本:結構、厳密に見ざるを得なかったというか。例年だと、1人のユーザーが何かを変更した結果がレスポンスとして返ってくるみたいな問題が割と一般的だったんですけど、今年は「ライドチェア」ということで、ユーザーと椅子が相互に連動するというか。マッチングしたら椅子の状態を決めるのは何かユーザーの行動に依存したり、ユーザーの行動を決めるのはそのマッチングされた椅子の状態に依るというか。相互作用がリクエスト間で結構あったので、そこのチェックを厳密にやらないと、何でもリクエストを通せてしまう危険性があったので厳しくなってしまいました。

大橋:ちゃんと全部チェックし切れるように実装するのは本当にすごいなと思っていました。僕だったら絶対手を抜いちゃうなって思うから(笑)

ブログで「ISUCON史上No.1の問題」と評価

ーー実際に問題を解いている参加者たちを見てどうでしたか

大橋:実際に解いてるところにはほぼ行きませんでした。でも終了後、参加者たちがみんなブログを書いていて、それらを読むのがめちゃくちゃ楽しかったですね。そのマッチングの部分に関して「これまではリクエストに対するレスポンスの速度を高める部分がほとんどでしたが、今年は問題の主軸の1つとしてレスポンスだけではなくアプリケーション全体の処理速度、スループットみたいな部分を上げると得点が上がるという要素が面白かった」という声がありました。あと、「これまでのISUCONで一番いい問題だった」みたいなことを書いてくれてた人がいて、めちゃくちゃ嬉しかったですよ。

澤田:LINEヤフーさんのご厚意で、感想戦という形で競技が終わった後も遊べるように問題を1カ月ぐらい公開してくれていたんですよ。それで結構盛り上がってて。

ーー「年末年始もやってみてください」という

澤田:そうそう。競技中のスコアは最高5万点くらいだったんですけど、遊んでくださった方もいっぱいいて、スコアは80万ぐらいまでいったのかな、結局。

大橋:400万です、400万!

澤田:正しい競技レギュレーションの中で80万を出して、それをぶち破って400万出しましたみたいなチームがあった。

大橋:あのブログ*は良かったですね。

*:ISUCON14 をベンチマーカーの限界を超えて最適化した話

澤田:かなり盛り上がってましたよね。

ーー次回は作問か競技側か、どちらで出たいですか

大橋:やっぱ競技者として出たいです。

澤田:競技側で出させてくれるのかな。出禁の可能性が(笑)

大橋:でもやっぱり大変だったじゃないですか。競技の前日は「もう絶対、一生、作問はやらない」と思っていたんですけど、終わった当日から1週間ぐらいは「またやってもいいかな」と。でも、最近は出られるんだったら競技者として、と思うようになりました。

岸本:もし次回もやるんだったら、締め切り駆動じゃなくて、もう一定の開発をずっとやっていきたいですね。あとは、もう少し作問の人数が増えたらいいなと思います。でも、普通に競技者として出られるなら出たいという気持ちはありますよ。

澤田:私も競技に出たいっていう気持ちはあります。単純に大変じゃないですか。一時期、土日返上でひたすら作業みたいな感じだったんですよ。プレッシャーもありますしね。今回は大団円で終わりましたけど、岸本さんが一時へなへなになってしまったくらいプレッシャーがあるんで(笑) 覚悟いりますよね、やるにしても。

ーー最後に、ISUCONに出たことがない方へのメッセージをお願いします

澤田:ISUCON次回あるのか、という説が毎年言われていて、でもなんだかんだで14回も開催されているんですよ。作問の大変さを知った身としては、14回も開催できるって本当にすごいイベントだわと感じています。しかも作問者が毎回違いますし。

大橋:ぜひ参加してください。毎年0次予選云々って言われてましたが、今回はありませんでした。今年も枠がたくさんあるはずなので、気軽にちょっとでも興味あったら参加してみてほしいなと思いますね。

澤田:「ISUCON出たことあります」って意外とレアかもしれないので、潜在層はたくさんいると思うので、ぜひ出てほしいですよね。

岸本:今回は特に例年と比べてベンチマーカーが厳しすぎたので、ちょっと難しい印象を持たれたかもしれないですけど、多分次回は、もうちょっといい感じになってくれると思います。

澤田:次回作問者への申し送り事項ですか(笑)