2014年11月2日
スタンフォード大学の並列プログラミング・コース用AWSインフラストラクチャ
本記事は、原著者の許諾のもとに翻訳・掲載しております。
昨年と今年の冬学期に、私は CS149 コースのティーチング・アシスタント(TA)を務める機会に恵まれました。CS149とはスタンフォード大学の並列プログラミングのコースです。講師を担当したのは Alex Aiken と Kunle Olukotun でした。私は仕事に取り掛かると、コースで使用するマシンの管理について根本から見直しました。CS149は一風変わったコースで、課題ごとに異なるプログラミングモデルを学びます。ですから、課題が出る度に、異なるハードウェアやソフトウェア・スタック上でプログラミングを実行することになります。
開講当初、TAは各課題で使用する物理的ハードウェアを個別に管理していました。課題の準備をする際には、ゲイツ・ビルディングの地下へ降りて行って、使用するマシンが貸し出し中であったり盗まれたりしていないことを確認しなければいけませんでした。また、学期ごとにソフトウェアの設定を(多くの場合は手動で)行っていました。TAが入れ替わることで、コースの進め方に一貫性がなくなり、問題はさらに深刻になりました。これでは明らかに、長期的な管理が不可能です。
前年のTAが、AWS(Amazon Web Services)のAmazon EC2への移行を始めていましたが、作業は途中で止まったままでした。私は、中途半端なAmazon Linux AMIと、移行前から残っていた物理的ハードウェアを抱え、授業を担当することになったのです。そこで私はEC2への移行を完了させようと決意し、その後、新たなインフラストラクチャの構築に取り掛かりました。目標はプロセスを完全に自動化することです。そうすれば、わずかなコマンドだけで各課題を実行できるようになります。
このインフラストラクチャは、スタンフォード大学において2年間にわたり本番環境で使用されてきましたが、現在はMITライセンスを適用したオープンソースとして配布されています。ソースと使い方については以下のプロジェクトページを参照してください。
私は自分の仕事に誇りを持っていますが、正直に言ってしまうと、これはきれいなコードというわけではありません。TAとして、完璧であることよりも実用的な良いものを、というのが私の目標でした。そのため、私は既存の技術(例:Kerberos)を再利用しました。また、不必要な負荷だと感じる技術(Puppetなど)よりも、独自の軽量なソリューションを使用することもありました。最初の実装の期間が2週間しかなかったので、こういった方法をとったのです。しかしMVPを構築する時間がもっとあれば、違った選択をしていたでしょう。
このコードは十分抽象化されているので、CS149と類似のコースでも使用できます。とは言うものの、CS149で教えたもの(例:MPI)とは大きくかけ離れたプログラミングモデルを扱う際は、さらなる創意工夫が必要になります。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa