2025年1月24日金曜日

SchedulingBenchmarksの検討

 INRC2は、行き詰まっているので、気を取り直して、SchedulingBenchmarksを検討してみることにしました。

SchedulingBenchmarks残りの未解決問題は、2問あり、instance23/24です。この問題の課題は、2点あり、

1)超大規模につきコンパイルできない(128GBメモリでも不可)

2)リニアソルバが、遅すぎる

1)については、strandmarkさんの方法があります。

First-order Linear Programming in a Column Generation Based Heuristic Approach to the Nurse Rostering Problem


ヒューリスティクスな方法を取っているために、厳密な下界が求められないという問題があります。厳密解を求めようとすると1)がネックになります。また、リソース制約下の最短距離問題は、一般にラベリングアルゴリズムが用いられますが、検討するまでもなく遅すぎて使い物にならないでしょう。1)については、ひとまず置いておいて、2)について検討してみます。

First Orderの検討

これと、Simplex Solver CLPとの比較をしてみました。誤差は、1e-5に設定しています。

cPDLPCPU  cuPDLP(Quadro P1000)  CLP
instance19 46.7sec    21.6sec 2.6sec
instance20 14.8sec    6.7sec 9.6sec
instance21 41.5sec   16.2sec 78sec

規模が小さいとき(instance19以下)は、明らかにCLPが速いです。しかし、規模が大きくなってくるinstance20以上から、逆転する傾向となります。「大規模では、SimplexではなくIPMで」、がこれまでの定石でしたが、これからは、GPUも選択肢の一つになる、ということです。OR業界でのイノベーションです。

instance22/23の規模は、instance21の数倍以上なので、CLPでは、数分以上という値となり、もはや現実的ではありません。高性能CPUにすれば、2倍までは期待できますが、Simpilexは、マルチスレッドの恩恵が殆ど得られないことが分かっているので、CPUで何とかすることは出来ません。

cPDLPCPUは、FirstOrderのCPUバージョンで、GPUではなくCPUでFirstOrderを実行した値になっています。

ソースでは、cupdlp_def.hで、定義してコンパイルしたときの値です。
#ifndef CUPDLP_H_GUARD
#define CUPDLP_H_GUARD
#define CUPDLP_CPU 1

今のGPUを使用したとしても、instance23/24では、1分を超えてしまうので、やはり遅すぎます。出来れば、数秒以内、最悪でも10秒以内としないと、現実的な時間内に解くのは難しいと思います。

ところが、Paper/MIPソルバのベンチマークで使われているのは、H100等であり、50万以上します。


なので、価格的にフェアな比較にはなっていないと思います。

現実的な路線で、クラウドで使用可能なのは、4090クラスです。


一方、P1000という上記GPUのCUDA数は、640、ベースクロックが1.3GHzです。GPUを最近の高性能の物に置換するとすると、

後述の理由によりメモリ16GBは、欲しいので、RTX 4060Ti
を考えると、CUDA数・クロック数比から、

4352/640*2.31/1.3=12倍

P1000に対して、最大で12倍の性能向上が見込める計算にはなります。よって目標の10秒以内を見込むことが出来ます。最悪、クラウドを使えば、4090を使用できるでしょう。いずれにせよ、GPUを使用することにより、リニアソルバ問題は、目途がついた、と考えています。COPTを使用しなくても、GPUで代替え可能であろう、と結論します。

一方でLLMの検討用にクラウドではなく、ローカルでそこそこ動くGPUが欲しくなります。AIが作成した記事のようですが、


これによれば、VRAM16GBは、必須です。よって、RTX4060Ti 16GBを選定しました。

次の課題は、超大規模問題を如何にコンパイルするか?です。


0 件のコメント:

コメントを投稿