24コア・192GBのミニワークステーション「MS-02 Ultra」を3台つないでクラスタ計算を試す
イチケン / ICHIKENMinisforumはミニ PCで知られるメーカーだが、ワークステーション型のモデルも出している。この動画では、その小型ワークステーション「MS-02 Ultra」を3台用意し、クラスタ計算機として使う。多コアCPUを使い切る題材としてモンテカルロ法による円周率計算と流体シミュレーション、大容量メモリーを使い切る題材として大規模言語モデル(LLM)の推論を選んでいる。話者は最終的に、数値計算用途には使えそうだが、専用機との比較やLLMの実用性には限界がある、という評価をしている。
小さな筐体に詰め込まれた仕様
使用したのはMS-02 Ultraの3モデルのうち最上位の「MS-02 Ultra 285HX」である。ミニPCよりは大きいが、一般的なパソコンとしては小さい部類だと話者は紹介する。この大きさで、24コアのCPU、192GBのDDR5 ECCメモリー、デュアルの25GbE SFP28を搭載している。
正面には電源ボタンやUSB端子がある。USB-CはUSB4 V2が2ポートで、規格上は80Gbpsまで出る。USB4 over Ethernetに対応しているので、PC同士を対応するUSB-Cケーブルでつなげばネットワークも組める。このポートは画面出力も兼ねている。
背面にはRJ45が2口(2.5ギガと10ギガ)、HDMI、USB4、そして25ギガのSFP28が2口ある。SFP28はマザーボードではなく、ネットワーク拡張カードから出ている。
Intel E810とRDMA
SFP28のイーサネットコントローラーにはIntel E810が使われている。話者がこれを評価する理由は、RDMA(リモートダイレクトメモリーアクセス)が使えることだ。RDMAは、ネットワークでつないだパソコンのメモリー間で直接データをやり取りする技術で、OSやCPUを介さずに高速に通信できる。今回の3台クラスタでのシミュレーションではこのRDMAが効いてくる、と話者は述べる。MinisforumはMS-02 Ultraを最初からクラスタ計算機として使う想定で、RDMA対応のカードを選んだ可能性がある、とも推測している。
内部構造と拡張性
ケースはアルミ製で、話者は小さい筐体の放熱を考えたものだろうと見ている。継ぎ目が見当たらないため押し出し成形ではないかとも推測していた。内部は下から電源、ネットワークカード、CPU、PCIeの空きスロットの順に並ぶ。空きスロットはロープロファイルのグラフィックボードなら入る程度のサイズで、空間的な余裕は少ないため、何を付けるか迷うサイズ感だという。CPUクーラーには吸気側と排気側に1個ずつ、計2個のファンが付いている。
CPUはIntel Core Ultra 9 285HXで、Performanceコア8個とEfficientコア16個の合計24スレッドである。AI処理向けのNPUも搭載しているが、13TOPSでは正直物足りず、おまけ程度に考えた方がよいと話者は言う。画像分類や物体検出、小規模なLLMは動くものの、NPUを使うよりGPUを増設した方が満足度は高そうだという評価だ。
メモリーは表側のヒートシンクの下に2枚、裏側に2枚ある。裏側にはWi-Fiモジュールと元から内蔵されているSSDがあり、空いていた増設用スロットには、起動するOSを分けるためにキオクシアのSSDを追加した。さらにネットワークカード上にもM.2端子が2つあり、SSDは合計4枚まで取り付けられる。
3ノード72スレッドのクラスタ構成
1台あたりの計算資源はCPU1基、24スレッドで、これが1ノードになる。同じノードを3台つなぐと、合計72スレッドを走らせられるクラスタができる。並列計算ではノード間でデータの交換や同期が必要になるため、Open MPIとIntel MPIを使った。Intel MPIはRDMAを使えるので、RDMAの有無でどれだけ差が出るかも検証対象にした。
接続は基本的に25ギガのSFPをダイレクトアタッチケーブルでつなぐ方式だが、懸念点として、使ったスイッチの速度が10ギガしかない。計算にとって重要なのが帯域幅なのかレイテンシなのか、この時点では話者もまだ分かっていなかったため、ひとまずこのスイッチで進めることにしたという。
モンテカルロ法による円周率計算
並列計算の初歩として、モンテカルロ法で円周率を求めた。四角形の中にランダムに点を打ち、円の中に入った点の数から円周率を計算する方法である。話者によれば、1回ごとの計算が独立していて互いに影響せず、1ステップ前の計算を待つ時間も発生しないため、並列計算と相性がよい。スレッドが増えるほど短時間で終わるはずだ、という見立てで試行回数を2億回に設定した。
結果は次のとおりである。
- 1スレッド:42.3秒
- 2スレッド:22.8秒
- 24スレッド(1ノードの最大):2.77秒
- 48スレッド:1.41秒
- 3ノード72スレッド:0.97秒
2スレッドでほぼ半分の時間になり、スレッドを増やすほど大幅に短くなった。ただし完全な反比例ではなく、話者はその理由を、計算以外にかかる時間があるためだと説明している。
OpenFOAMによる流体シミュレーション
次に、オープンソースで無料の流体シミュレーションソフトOpenFOAMを使った。話者の簡単な説明では、計算対象をメッシュで区切り、隣り合うメッシュ同士で足し算・引き算をして微分方程式を代数的に解いている。同じモデルでメッシュを細かくすれば細部まで計算でき、メッシュの大きさを変えずに範囲を広げれば大きなモデルを扱えるが、どちらの場合もメッシュ数が増え、計算時間も増える。こうした数値計算にも並列計算は有効だという。
しかし、モンテカルロ法のようにスレッドやノードを増やせば単純に速くなるわけではなかった。2次元のダムブレイクの計算でスレッド数を変えて比較したところ、1ノード内ではスレッド数が増えるほど完了までの時間が短くなる傾向があった。そこでノードをつないでさらにスレッドを増やせば短縮できると考えたが、逆に完了までの時間が大幅に延びてしまった。
検証を進めた結果、1スレッドが担当するメッシュ数が少なすぎると、計算そのものより他の処理にかかる時間の方が相対的に大きくなることが分かった。また、24スレッドを全部使い切らない方がシミュレーション時間が短くなることも分かった。後者について話者は、CPU、メモリー、ノード間のやり取りがごちゃごちゃしているのが原因ではないかと推測している。対策としては、1スレッドあたり数十万メッシュ程度を担当させれば計算時間の割合が大きくなり、並列計算をする意味が出てくるという。
Intel MPIとRDMAの効果
ここまではノード間の並列計算にOpen MPIを使ってきた。Intel E810がIntel MPIとRDMAに対応しているため、そちらに切り替えて比較したところ、Intel MPIの方がOpen MPIより17%時間を短縮できた。E810はOpen MPIでのRDMAにも対応しているようだが、最適化の設定が難しそうなため今回は断念し、機会があれば試したいと話者は述べている。
今回の知見として話者が挙げたのは、OpenFOAMのような計算ではネットワークの帯域幅(10ギガか25ギガか)はあまり重要ではなく、レイテンシの方がかなり効いているように感じる、という点である。これは話者の実感として語られている。
671BのDeepSeek-R1をCPUとRAMで動かす
最後に、大容量メモリーを生かす実験としてLLMの推論を試した。LLMの推論は本来GPUと高帯域幅メモリーで行うものだが、今回はあえてCPUとRAMで動かす。使用したのはDeepSeek-R1のQ4_K_M量子化モデルで、パラメータはフルサイズの671B(6710億)、モデルの容量だけで400GBある。これを3台のRAM上に展開した。
展開後のメモリー使用量は、1台目が192GB中184GB(96%)、2台目が170GB、3台目が169GBだった。話者はこれほどメモリーを使っているのは見たことがないと驚いている。空き容量をぎりぎりまで攻めたため、コンテキストサイズを大きくできず、2万程度に調整した。
チャットを始めると、1台目ではCPUが意外と使われ、イーサネットでも常時100Mbps程度の通信が発生していた。他の2台ではCPUでの処理は目立たないが、やはり100Mbps程度の通信が継続していた。途中で通信量が急に落ちる場面もあった。
最初に長文を話すよう頼んだが遅すぎて終わらず、400文字程度に変えてもなかなか終わらなかったため、「Hello」とだけ送った。これで応答が出てきたが、速度は毎秒1.1トークン程度だった。その後最初のプロンプトをやり直すと、先ほどは何かおかしかったようで、内部で考えている様子は見られたものの、ChatGPTなどと比べるとやはり遅い。話者は、大きなモデルが動くことにはロマンがあるが、動作速度を見ると現実に引き戻されると語り、大きくてもCPUで速く動くモデルはないのだろうか、と疑問を投げかけている。
話者の評価
数値計算については、コア数の多さと大容量RAMから、MS-02 Ultraは使えそうだと話者は結論づけた。一方で、本格的な数値計算用ワークステーションと比べると、CPUとメモリーをつなぐレーン数が少ないといった点で見劣りするという。LLMについてはやはりGPUの独壇場で、CPUでも動きはするが実用性は低いと感じた。ただし1台あたり192GBのメモリーがあるので、大きなモデルを載せられる点はメリットだとしている。
こんにちは。今日は小さい中に色々と詰め込みすぎているパソコンを使ってみます。こちらです。MinisforumのMS-02 Ultraというモデルです。Minisforum自体はミニPCで有名ですが、この様なワークステーションタイプのパソコンも出しています。ミニPCメーカーだけあってワークステーションもこのようにかなり小型のものになっています。
このように小さいですが、中身を見てみると24コアのCPU、192GBのDDR5 ECCメモリー、デュアルの25G SFP28を積んでいるという、かなりハイスペックな仕様となっています。
今日の動画の内容ですけれども、このミニワークステーションの性能をフルで使い切るような実験をやってみます。大容量メモリーを使い切るものとしては大規模言語モデル、いわゆるLLMを使った推論、マルチコアのCPUを使い切るものとしては流体シミュレーションをやってみます。また今回は1台だけではなくて、これら3台を使ってクラスター計算機として使えるようにしてみます。ということでまずMS-02、この外見の小ささに対して中身がどれくらい詰まっているのかを見ていきます。
まずは外観からです。ワークステーションとしてはかなり小さいです。ミニPCよりも大きいんですけども、普通のパソコンとしては小さい部類です。ちなみにMS-02 Ultraにはスペック違いの三つのモデルがありまして、これは最上位モデルのMS-02 Ultra 285HXです。
正面部分は電源ボタンやUSB端子などよくある構成です。こちらのUSB-Cの部分はUSB4 V2が2ポートあります。規格上は80Gbpsまで出るのでかなり高速です。USB4 over Ethernetに対応しているので、例えばPC同士を対応しているUSB-Cケーブルで接続すれば、ネットワークも作れるようになっています。本体裏側からも画面の出力はできますが、こちらも画面の出力を兼ねています。
次、裏側ですね。USB、LANケーブルを挿すRJ45が2口、HDMI、USB4、そしてSFP28です。LANケーブルを挿すRJ45は2口あって、2.5ギガと10ギガです。さらにこちらのイーサネットについては、25ギガのSFP28が2口付いています。これはマザーボードからではなくて、ネットワークの拡張カードから生えているものとなっています。このようにネットワーク関連についてはかなりの豪華仕様となっています。
しかもSFP28については、イーサネットコントローラーとしてIntel E810が使われています。このコントローラーの何が良いかというと、RDMA、リモートダイレクトメモリーアクセスが使えることです。これはネットワークで繋いでいるパソコンのメモリー間で直接データをやり取りする技術です。OSやCPUを介さないで高速にデータをやり取りできるというメリットがあります。
今回このパソコンを3台使ったクラスター計算機でシミュレーションを走らせるのですが、このRDMAが非常に効いてきます。Minisforumとしては最初からこのようなクラスター計算機として使うことを想定していて、RDMAが使えるネットワークカードを選定した可能性があります。
次は中身を見ていきます。ケースはこの様にアルミでできています。筐体が小さいので放熱を考えてのアルミケースでしょうね。見た感じ継ぎ目がないので、これは押し出しで作っているのでしょうか。結構手が込んだ作りをしています。
中身も非常にコンパクトにまとまっています。下から電源、ネットワークカード、CPU、PCIeの空きスロットです。PCIeの空きスロットはロープロファイルのグラボなら入るぐらいのサイズです。空間的な空きは少ないので、ちょっと何付けようか迷うサイズ感ですね。
ちなみにここのカバーは外れます。CPUクーラーが見えていまして、入口出口でファンが2個付いている構成です。CPUはIntel Core Ultra 9 285HXです。Performanceコアが8個、Efficientコアが16個の合計24スレッドです。
AI処理向けのNPUも付いていますが、13TOPSで正直物足りない為、おまけ程度に考えておいた方が良いです。一応用途としては画像分類であったり、物体検出、小規模のLLMが動きます。ですがNPUを使うよりGPUを増設した方が満足度は高そうです。
こちらのヒートシンクの下に隠れていて見えないのですが、この下にDDRメモリが2枚あります。次は裏側です。裏側はDDRメモリ2枚と、Wi-Fiモジュール、元々内蔵しているSSDです。こちらにキオクシアのSSDが入っていますが、これは増設用に空いていたスロットです。今回は起動するOSを分けるために増設しました。
SSDの増設でいうと、実はネットワークカード上にM.2端子があって、さらに追加で2枚増設できるようになっています。ですのでSSDはトータルで4枚までつけられる構成です。
ここまでざっくりとハードウェアの概要を見てきましたが、ここからは実際に計算機として使っていきます。まず計算に使える資源についてまとめると、このパソコンにはCPUが一つ入っていて、CPUは24コアで24スレッドの計算を走らせることができます。これが1ノード分、つまりパソコン1台分の計算資源です。さらにこれと同じノードが二つあり、合計で3ノード72スレッドを走らせることもできるクラスターがひとつ出来上がります。これだけのスレッド数があるので並列計算には強いはずです。
並列計算をするためにそれぞれのノードでデータの交換や同期をする必要があります。今回はそれについてはOpen MPIとIntel MPIを使うことにしました。特にIntel MPIはRDMAを使えるので、RDMAのありなしでどれくらい差が出るのかも検証します。
ネットワークへの接続なんですけど、今回は基本的に25ギガのSFPを、このダイレクトアタッチケーブルを使って接続します。若干懸念点がありまして、このスイッチの速度が実は10ギガなんです。計算で重要になるのが帯域幅なのか、それともレイテンシなのかという事が今ひとつまだわかっていないので、ひとまずこのスイッチで進めることにします。
ちなみに今日の実験で使った並列計算のコードやMPIの設定方法については、概要欄のGitHubとブログ記事にまとまっているので、気になる人はぜひチェックしてみてください。
まずはマルチスレッドを生かした並列計算の初歩として、モンテカルロ法を使って円周率を計算します。この四角形の中にランダムで点を打っていって、丸い形の中に入った点の数を数えて円周率を計算するというものです。
モンテカルロ法は並列計算と相性が良いです。というのも1回1回の計算がそれぞれ独立していて、それぞれの計算結果同士が与える影響というのは一切ないからです。またスレッドやノードの間で、ワンステップ前の計算が終わるのを待つという待ち時間が発生しないので、CPUが持っている計算資源を効率よく使うことができます。つまりモンテカルロ法を並列計算する場合は、スレッドの数が増えるほど短時間で計算を終わらせることができるということです。
では実際に試してみます。まずは1スレッドだけを使った場合です。今計算を始めました。このように0番のCPUだけ使用率が100%となっています。このまましばらく放置します。計算が終了しました。1スレッドだけの場合は計算時間は42.3秒かかってます。
次は2スレッドを使った場合どうなるか見てみます。CPU使用率ですが、二つのCPUが100%に張り付きましたね。頑張って計算しています。ちなみに今回モンテカルロ法の試行回数は2億回にしています。計算終了しました。22.8秒かかっています。大体半分の時間で計算が完了しました。
次は1ノードで使える最大のスレッド数である24です。そうしますと、全部のCPUの使用率が100%になりました。ですが、すぐ計算が終わってしまいました。さすがに早いです。24スレッドですと2.77秒となりました。使うスレッドの数が多くなるほど計算にかかる時間は相当短くなりますが、完全に反比例というわけではなさそうです。これは計算以外に使う時間もあるため、このようになっています。
次は48スレッド。多分一瞬で計算終わります。終わりました。1.41秒。そして最後、3ノード合計72スレッドで計算をします。計算終わりました。0.97秒となっています。このように計算時間が非常に短くなりますので、並列計算様様といったところです。
次は数値計算なんですけれども、流体シミュレーションをやってみます。わかりやすいものでいうと、このように水の流れを計算するものがあります。流体シミュレーションをするソフトにもいろいろあるんですが、今回はOpenFOAMを使いました。オープンソースになっていて無料で使えます。
計算の原理をものすごく簡単に説明すると、計算する対象をこのようにメッシュで区切っていきます。その区切ったメッシュの隣で足し算引き算をして、微分方程式を代数的に解くということをしています。
モデルの大きさは同じでメッシュをこのように細かくしていきます。そうするとものすごい端っこの細かいところまで数値計算できるようになるんですけれども、メッシュの数は増えます。メッシュの大きさが変わらなくても、さらに広い範囲を見たいという風になってシミュレーションをしましょう。そうすると広い範囲、大きなモデルのシミュレーションはできるようになるんですけれども、やはりメッシュの数は増えます。ここでメッシュの数が増えるイコール計算にかかる時間が増えるといえます。
このような数値計算に対しても並列計算はやはり有効です。ただし先ほどのモンテカルロ法のように並列計算をすれば何でもOKというわけではなくて、OpenFOAMの場合、スレッド数、ノード数を増やすほど計算時間を短縮できるというわけにはいきませんでした。
例えばこちらの結果を見てもらうとわかりやすいです。先ほどの2次元のダムブレイクの計算で、スレッド数を変えてみたときにかかった時間の比較です。使うノードが一つだけの場合は、シミュレーションが完了するまでの時間はスレッド数が増えると短くなる傾向にあります。ここでさらにノードを繋いでスレッド数を増やしていけば時間短縮できるはずと考えたんですけれども、そこまで甘くはなくて、逆にシミュレーションが完了するまでの時間が大幅に延びてしまいました。
いろいろ検証を進めていくと、どうやら一つのスレッドが担当するメッシュの数が少なすぎると、計算にかかる時間よりその他の処理に掛かる時間の方が相対的に多くなることがわかりました。また使用するスレッドの数も、24スレッドを全て使い切らない方がシミュレーションにかかる時間が短くなるということもわかりました。これについてはパソコンのCPU、メモリー、あとはノード間でのやり取りで結構ごちゃごちゃしているのが原因かと思います。
じゃあどうすればいいかなんですけど、1スレッドあたり数十万メッシュ程度で計算すると、計算以外に使う時間より計算に使う時間の方が相対的に長くなって、並列計算をやる意味がでてきます。
ここまでノード間で並列計算をするのにOpen MPIを使ってきました。ですけれどもネットワークカードのIntel E810がIntel MPIとRDMAに対応しているので、さらに計算を高速化できないかを試します。こちらが結果です。Intel MPIの方がOpen MPIと比べて17%時間を短縮できています。
ネットワークカードのIntel E810はOpen MPIのRDMAにも対応しているようですが、最適化の設計が難しそうなので今回は断念しました。また機会があったらやってみたいです。
今回得た知見なんですけど、OpenFOAMなどを使う場合は、ネットワークの帯域幅、10ギガとか25ギガとか、それらは実はあまり重要ではなくて、ネットワークのレイテンシーの方がかなり効いているような感じがします。
そして最後は大容量メモリを生かせるような実験として、大規模言語モデル、LLMを使った推論をやってみます。LLMを使った推論は基本的にはGPUのパワーと高帯域幅のメモリーを使ってやるようですが、今回はあえてCPUとRAMでやります。
今回はDeepSeek-R1-Q4-K-M量子化モデルを使います。パラメータはフルサイズの671B、6710億となっており、モデルの容量だけで400GBとなっています。これをRAM上に展開して実際に動作させます。
現在メモリ上に展開が終わったんですが、192GBあるメモリのうち184GBを使っています。96%を使っていますね。残りの2台についても実はメモリの容量結構カツカツで、こちらは170GBを使用、3台目は169GB使用となっています。すごいですね。こんなにメモリ使っているの見たことありません。
ちなみにメモリの空き容量を結構ギリギリのところを攻めたので、コンテキストサイズを大きくすることができず、2万程度のコンテキストサイズに調整しています。
では実際に何かチャットをしてみましょう。この様にCPUは意外と使っていますね。あとイーサネットの通信も常時100Mbpsくらいでやっています。他のノードも見てみますか。他の機体についてはCPUで何か処理をしているという事はしていないのですが、イーサネットで継続的に何か通信はしています。100Mbpsぐらいはやっています。
急にイーサネットの使用量が落ちました。何でしょうか。あまりにも遅い為、プロンプトを変えます。「長文話して」というのは多分あまりよくないんでしょうね。400文字ぐらいで何か話してみましょうか。すみません、ちょっとこれもなかなか終わらないので、もう最終手段「Hello」です。このように、出てきました。結構遅いですね。毎秒1.1トークンぐらいです。
先ほどのやつをちょっとやり直してみます。先ほどは何かおかしかったみたいですね。この様に中でいろいろ考えてはいるんですが、ChatGPTとかそういったものと比べると、ローカルで動いてますからね、仕方ないんですけどやっぱり遅いですね。こういった大きなモデルが動くっていうのはロマンがありますが、動作速度なんかを見ると急に現実に引き戻されてしまいますね。大きいモデルでCPUで速く動くモデルってないんですかね。
というわけで今日はMinisforumが出しているミニワークステーションのMS-02 Ultraを、数値計算やLLMを動かす目的で使ってきました。数値計算での活用は、コア数の大きさと大容量RAMがあるという点から使えそうだということはわかりました。ただ、ガチの数値計算用のワークステーションと比べると、CPUとメモリを繋ぐレーンの数が少なかったりとか、そういったところで見劣りはします。
LLMについてもやはりGPUの独壇場で、一応CPUでも動きはするんですけども、実用性は低いなと感じました。ただメモリが1台192GBあるので、大きなモデルが入るというメリットはあります。ミニワークステーションに興味のある方、ぜひこちらを検討候補に入れてみてはいかがでしょうか。
というわけでもしこの動画が役に立ちましたら、高評価、チャンネル登録よろしくお願いします。何か気になることがあればぜひコメントで教えてください。それでは最後まで動画のご視聴ありがとうございました。
記事公開
