2024年11月のruncの実装
runcは抽象度の低いコンテナのランタイムであると同時に、そのランタイムを操作するCLIでもある。 もともとruncはdockerの一部だったが、2015年にdockerからのスピンアウトされた。 containerdがruncでコンテナの操作するので、今でもdockerはruncでコンテナを操作していることになる。 この記事は、runcの実装に使われているLinuxの機能を紹介する。
runcは抽象度の低いコンテナのランタイムであると同時に、そのランタイムを操作するCLIでもある。 もともとruncはdockerの一部だったが、2015年にdockerからのスピンアウトされた。 containerdがruncでコンテナの操作するので、今でもdockerはruncでコンテナを操作していることになる。 この記事は、runcの実装に使われているLinuxの機能を紹介する。
システム設計の面接では、与えられた情報からシステムに求められるシステムリソースを試算することを、back of the envelope calculations (estimation)という。
システム設計面接におけるNetflixやYoutubeのような動画サービスの問題における要点を整理する。
REALMは、オープンドメイン質問応答向けの言語モデルであり、入力文に関連する文書をみつけるknowledge retrieverと見つけた文書と入力文から応答を生成するknowledge-augmented encoderで構成されている。 事前学習はmasked language modelingによる教師なし学習であり、一部のトークンがマスクされた入力文をあたえたときに、もとのマスクされた単語を出力できるように訓練する。 オープンドメイン質問応答のファインチューニングでは、質問文を入力したときに、回答を出力できるようにモデルを訓練する。 評価実験では、期待する回答がknowledge retrieverの学習に使うコーパスに文字通りにあることが前提にされている。
Distributed GraphLabは、機械学習とデータマイニング向けのプログラミングモデルのGraphLabを、クラスタ上で実行できるように発展させた。 GraphLabは、グラフの一部から点の集合を返す関数を、反復的にグラフに適用する。 関数から返された点は再び関数に渡され、渡すべき点がなくなるとアルゴリズムは終了する。 Distributed GraphLabは、GraphLabをメモリ共有するノードからなるクラスタで実行できるように、Chandy-Lamportのスナップショットとロックを導入した。
Spark SQLは、関係データベースのテーブルにあたる抽象データ構造のDataFrameを公開し、Spark上で関係代数によるデータ処理を実現する。
DataFrameに対する操作は、save
のような出力まで遅延される。
遅延により蓄積したクエリは、最適化器Catalystで最適化された後にバイトコードにコンパイルされる。
行列分解による協調フィルタリングは、ユーザとアイテムの評価値行列を近似するユーザとアイテムの潜在因子行列の積を学習する。 Neural Collaborative Filtering (NCF) は、行列分解のかわりにニューラルネットワークで、パラメータを更新する。 NCFは3種類あり、Generalized Matrix Factorization (GMF) と Multi-Layer Perceptron (MLP)、GMFとMLPを組み合わせたNeural Matrix Factorization (NeuMF) がある。
2005年、StonebrakerとÇetintemelは、“One Size Fits All”で、ストリーミングデータを例に、あらゆる種類のデータをDMBSで管理できなくなったと主張した。 “One Size Fits All"については過去の記事で紹介した。 2003年に発表されたTelegraphCQは、そのようなドメイン特化のデータベースが必要とされはじめた初期のストリーミングデータのためのデータベースである。
スケーリング則によれば、Transformer型モデルのテストデータに対する交差エントロピーの損失は、のこり2つの要素がボトルネックにならないかぎり、パラメタ数、データ量、訓練時間とべき乗の関係にある。 パラメタをふやすほど損失を下げることができる。
Hoffmann et al. (2022) は、訓練に使えるFlop数が一定のときに、事前学習時の損失を効果的に下げるには、訓練時に参照するトークン数、パラメタ数を等しい比率でスケールすべきと結論づけた。 実験のために開発されたパラメタ数70BのモデルChinchillaはパラメタ数175BのGPT-3の性能を上回った。
しかし、訓練時の損失を目標まで下げるまでにかかるFlop数が少ないモデルほど、推論時もプロセッサの利用効率がよいとはかぎらない。 たとえば、パラメタ数の大きいモデルが小さいモデルよりも高いプロセッサの利用効率で訓練時の損失を目標以下にできても、推論に必要なFlop数はパラメタ数が多いモデルのほうが大きい。
Michael StonebrakerとUğur Çetintemelは、2005年にOne size fits allで、データウェアハウスとストリーミング処理をとりあげ、すべてのデータをRDBMSで管理する時代の終わりを主張した。 組織はデータベースを特定の用途ごとに使い分けるようになった。 しかし同時に、データベースの開発者は、どんなデータベースでも必要な仕組みをデータベースごとに実装しなければならなくなった。 どのようなクエリ言語を採用するデーターベースにもクエリ最適化が求められる。 一方、組織は複数のデータベースに分散したデータを統合しなければならなくなった。
Apache Calciteは、SQLの解釈、最適化、実行のためのフレームワークであり、複数のデータベースに分散したデータへのANSI標準のSQLでの問い合せを実現する。 データが複数のデータベースに分散していても、クライアントはデータが1つのRDBMSにあるかのようにSQLでCalciteに問い合せられる。