HPC環境でキューを流して48時間待ったのにジョブが実行されず、予想開始時刻は今日から3日後と表示されて絶望した。しかしclaudeに頼み込んだおかげで今はジョブが走りはじめた。これを成し遂げたのはclaude opus 4.7だが、コンテクスト長の少ないsonnet でも haiku でも実行可能な仕事だ。opusやsonnetでもこんなに賢いのだから、mythosを安易に誰にでも使えるようにしないという決断には賛成する。mythosに関しての話はここまで。以下はmythosとは関係ない話だ。
今使っているHPC環境では、計算時間で3つのクラス(HPC環境ではpartitionと呼ぶのが慣習)に分けている。long/middle/shortだ。ユーザーは自分の計算時間がどのクラスでよいかを見積もって、ジョブにlong/middle/shortのどれかのラベルを付けて申し込みキューに流す。前述のルールにより、shortがいちばん優先度が高くなっている。だから、短時間で済む計算にはshortラベルを付けるのが合理的だ。優先度が高くなるので、リソースを割り当ててもらえる可能性が上がる。shortより時間がかかりそうな計算にはmiddleラベルを付けるのが合理的で、longラベルを付けるのは優先度が最低になって不利だ。
私のジョブはmiddleラベルを付けてキューに流したが、48時間たっても開始されなかった。そこで、claudeに「まさかと思うが、longラベルを付けてみてはどうだろうか」と提案した。claudeは現在待機中のジョブを調べて、longラベルの方が実行可能性が高いと判断した。そこでmiddleのジョブをキャンセルして、同じジョブをlongとして流したらすぐに実行が開始されたのだった。
HPC環境が計算リソースを割り振るアルゴリズムではmiddleの方がlongより優先度を上げるようにしてある。しかし、優先度を絶対条件としてしまうと、middleジョブがひとつでもキューに並んでいる限り、longのジョブは決して実行されないことになってしまう。それでは逆にlongの利用者に不利すぎるので、long用のリソースを少しは常に確保するというルールになっているらしい。これは今回判明したことだ。そして、longは割り当てられにくいとみんな知っているので、middleで済むジョブをわざわざlongラベルを付けてキューに流す人はいない。そんな訳で、今回の場合はlongのジョブを流している人は少なくて、計算機リソースはmiddleよりも空いていたのだった。
今回の経験を活かして、claudeには新たな知見を学んでもらった。ジョブの待ち時間があまりに長いときは、あえて上のクラスのラベルを付けることで待ち時間を短縮できる可能性があると。
そして、middleがあまりに混んでいるときは、計算を分割してshortで計算できるようにしてshortとして流すことも覚えてもらった。これも実際に試してみたらうまく動いた。ただし、プログラムの分割はアルゴリズムの理解が必要なので、haikuには荷が重くsonnetかopusでないとうまくゆかない。
long/middle/shortのクラス(partition)を柔軟に使い分けることで、HPC環境を無駄なく効率的に使えるようになった。HPC環境を使い始めてからこれまでの2年間は、ひたすら順番を待つことしかしてなかったことが悔やまれる。工夫はできたのだ。claudeを使い始めたのが昨年の12月だから、仕方ないといえばそうなのだが、もっと早く気づけばよかった。
