〽️

Numerai新機能Model Uploadsのご紹介

2023/06/11に公開

序章

メロスは激怒した。必ず、かの邪智暴虐のNumerai computeを除かなければならぬと決意した。

メロスにはAWSがわからぬ。もちろんTerraformもDockerもわからぬ。

メロスは、村のデータサイエンティストである。システム案件は「あーそれはデータサイエンティストの仕事じゃないんですよぉ」などとホラを吹き、なるべく簡単なPoC案件だけ最低限やって遊んで暮して来た。

けれども理解できぬエラーに対しては、人一倍に敏感であった。

「うぬおおおおお」

メロスは絶叫した。

メロスには父も、母も無い。女房も無い。十六の、内気な妹と二人暮しだ。

この妹は、村の或る律気な一牧人を、近々、花婿はなむことして迎える事になっていた。結婚式も間近かなのである。

メロスは、それゆえ、花嫁の衣裳やら祝宴の御馳走やらを買う責務があるのだが、自分の貯金を使うのが嫌なので、Numeraiとやらでひと稼ぎしようと考えたのである。

かつてNumeraiのCTOはこう言っていた。

(CTO)「この3行のコードで、Numeraiへの提出を簡単に自動化できるぜ!」(意訳)

numerai setup
numerai docker copy-example
numerai docker deploy

メロスは公式のexampleを参考に適当にモデルを作り、dailyで提出してdaily payoutをゲットしようとした。ただ、手動でdailyで提出するのは面倒すぎて、のんきなメロスも、だんだん不安になってきたため、公式の自動提出の仕組みNumerai computeを使おうとしたのである。

SNSを見る限り、Numerai computeで提出を自動化しているツワモノは確かに複数存在する。そのため、何かはわからないが、何かメロスが見逃していることがあるのである。

「簡単って言ってたのに何で動かないの!?」

もう既に日も落ちて、まちの暗いのは当りまえだが、メロスはデータサイエンティストなのにAWSもTerraformもDockerも避けて生きてきた事実を本業外に突きつけられ、耐えられず飛び出した。

しばらく歩いて老爺に逢い、こんどはもっと、語勢を強くして質問した。老爺は答えなかった。メロスは両手で老爺のからだをゆすぶって質問を重ねた。老爺は、あたりをはばかる低声で、わずか答えた。

「Numerai computeは、簡単ではありませぬ。」
「なぜ簡単ではないのだ。」
なんやかんやAWS, Terraform, Dockerの初級レベルの理解がいるのです。NumeraiのCTOはカルフォルニア大学Irvine校でComputer Scienceを学び、Salesforce、Uberでエンジニアとして活躍したのち、NumeraiのCTOになった超エリートですから、彼にとっては簡単なことのです」
「たくさんの人を絶望させたのか」
「はい、はじめは王様の妹婿さまを。それから、御自身のお世嗣よつぎを。それから、妹さまを。それから、妹さまの御子さまを。それから、皇后さまを。それから、賢臣のアレキス様を。」
「おどろいた。CTOはご乱心か」
「いいえ、乱心ではございませぬ。実は最近になってAWSもTerraformもDockerも不要で、しかも完全無料で毎日自動提出できる別の機能が公式からリリースされております」
「!?」

Model Uploads

老爺によると、新機能はModel Uploadsというらしい。名前そのまますぎる。

Pickle Model Upload Beta

教えてもらったリンクを翻訳して読む限り、確かに簡単そうである。モデリングのパイプラインごとcloudpickleに保存し、一度Numeraiにuploadすれば、あとはNumerai側で毎日自動実行してくれるそうだ。確かにこれならAWSもTerraformもDockerも(参加者サイドでは)不要であるし、numerai computeでかかるであろうクラウド代も支払う必要がない。

「よくわからんけど、cloudpickleすごいな!」

Exampleのnotebookも公開されており、基本的にコピペ以外のコーディングができないメロスでもすぐ取り掛かれるようになっている。

公式公開のExample notebook

「CTO優しいな!万歳、CTO万歳。」

制限として、Numerai側での自動実行はnumerai-predictというAWS環境で行われるため、メロスのモデリング環境もnumerai-predict環境に合わせる必要があり、具体的には使用できるライブラリは以下に限られるようだ。

requirements.txt

中身を見てみたが、lightGBMやPyTorch等(使えるかは別として)メロスでも知っているライブラリは網羅されているようである。

また、Numerai TournamentではV2, V3, V4, V4.1と使えるデータセットは複数あるのだが、Model Uploads機能を使う場合、V4.1しか現状サポートされていないようだ。V4.1にはメモリ使用量を抑えるためにint8版も用意されているが、int8版はまだ非対応のようだ。

計算資源にもNumeraiの環境を使う関係で厳しい制限があり、1モデルにつき

1 CPUで4GB of RAMで推論時間は10分まで

となっているようだ。そのため(メロスにはもともとできないが...)neural netを使った重たいモデリングなどではtime-out errorになるかもしれない。

メロスはとりあえずGoogle Colab(無料版)でexampleを走らせた。

LightGBMでv4.1データのsmall feature setを使った訓練が行われ、メロスが「気の毒だが正義のためだ!」と猛然一撃、たちまち、三人の山賊を殴り倒している間に、訓練が終わり、提出用cloudpickleが作成され、ダウンロードされた。

メロスは自分のNumeraiアカウント でベータ機能をONにし、

http://numer.ai/submissions に行って先ほど作ったcloudpickleを自分のモデルスロットにuploadした。

メロスは胸の張り裂ける思いで、アップロードの行方を見守っていたが、

しばらくして提出が完了した旨のpop-upが表示された。

メロスは眼に涙を浮かべて言った。

「私を殴れ。ちから一ぱいに頬を殴れ。私は、途中で一度、CTOを疑った。君がもし私を殴ってくれなかったら、私はModel Uploads機能を使う資格さえ無いのだ。殴れ。」

Model Uploadsをやらない方がいい人

メロスが感動していると、深夜にDiscordに召された竹馬の友、セリヌンティウスが口を開いた。

「これは万人向けではないな」
「ばかな。」とメロスは、嗄しわがれた声で低く笑った。
「いや、まだ陽は沈まぬ。」

セリヌンティウスは、すべてを察した様子で首肯うなずき、刑場一ぱいに鳴り響くほど音高くメロスの右頬を殴った。

「!?」
「お前は何もわかっていない。Numeraiの良いところは、参加者は予測値だけ提出すればよく、そのためモデリングパイプラインという参加者の知財が守られていることだ。だからUKIさんやYoshisoさんといった強システムトレーダーも参加していたのではないか」
「そ、そうか...」
「Model Uploadsでモデルパイプラインを提出することは、楽な反面、知財をNumerai側に公開することに等しいのだ」
「あっ、なるほどですね」

確かにPickle Model Upload Betaの下の方にそのようなことが書いてあった。この機能はあくまでメロスのような、Numerai初心者が手軽にdaily submissionに参加できるようにするための機能である。

Numerai computeや独自のdaily提出の仕組み(例:Regonnさんの)が使えるのであれば、そちらを使った方がいい参加者も多そうである。
 
「ありがとう、友よ。」

二人同時に言い、ひしと抱き合い、それから嬉し泣きにおいおい声を放って泣いた。

「これで爆益だ!!!」

(一方そのころのNumerai Tokenの様子↓)

参考文献

Discussion