Clustering Three Minisforum MS-02 Ultra Mini Workstations: Monte Carlo, OpenFOAM, and a 671B-Parameter LLM

Open on YouTube ↗
Overview

Minisforum is best known for mini PCs, but it also sells a compact workstation, the MS-02 Ultra. The video tests the top model, the MS-02 Ultra 285HX. It has a 24-core CPU, 192 GB of DDR5 ECC memory and dual 25G SFP28 networking in a chassis that is only slightly larger than a mini PC. The presenter wanted to find out what that hardware can do under heavy load. Three units were linked into a cluster and given three jobs: a Monte Carlo calculation of pi, a fluid simulation that works every CPU core, and inference with a very large language model that fills the memory.

9 min read
1:23

Exterior and Networking

The presenter calls it quite small for a workstation and one of the smallest normal computers, though bigger than a mini PC. The MS-02 Ultra comes in three models with different specifications, and the one tested is the top model.

The front has a power button and USB ports, including two USB4 V2 Type-C ports. The presenter notes that the standard allows up to 80 Gbps. These ports support USB4 over Ethernet, so two PCs connected with a USB-C cable can form a network. The rear also has display output.

The rear panel has USB, HDMI, USB4, and two RJ45 LAN ports, one 2.5 GbE and one 10 GbE. There are also two 25 GbE SFP28 ports. These come from a network expansion card, not from the motherboard. The presenter describes the networking as "quite luxurious."

The SFP28 ports use an Intel E810 Ethernet controller. The presenter considers its main advantage to be support for RDMA (Remote Direct Memory Access), which lets networked computers exchange data directly between their memories without going through the OS or CPU, so transfers are fast. The presenter expected RDMA to matter for the cluster simulations. They also speculated that Minisforum may have picked an RDMA-capable card because it designed the machine for cluster computing from the start.

3:15

Inside the Chassis

The case is aluminum. The presenter guesses this helps heat dissipation in such a small chassis. It looks seamless, and the presenter wondered whether it was extruded, but did not confirm it. The interior is tightly packed. From the bottom up it holds the power supply and network card, then the CPU and a free PCIe slot. The slot can take a low-profile graphics card. Space is limited, though, and the presenter says that makes it a little hard to decide what to install there.

Removing a cover exposes the CPU cooler, which has one fan at the intake and one at the exhaust. The CPU is an Intel Core Ultra 9 285HX with 8 Performance cores and 16 Efficient cores, 24 threads in total. It also includes an NPU for AI processing. The presenter's view is that its 13 TOPS is "honestly not enough," so it is best treated as a bonus. It could handle image classification, object detection, or running a small LLM, but the presenter thinks adding a GPU would give more satisfying results.

Memory slots sit on both sides of the board. Two are under the heat sink and two more are on the back, which also holds the Wi-Fi module and the factory-installed Kioxia SSD. The presenter used the second, empty M.2 slot on the back for an extra SSD to hold a separate boot OS. The network card carries two more M.2 slots, so the machine can take up to four SSDs in total.

5:22

Cluster Setup

Each node has one 24-core CPU that runs 24 threads. With three identical units, the cluster runs 72 threads. Parallel work across nodes needs data exchange and synchronization, and the presenter used two MPI implementations for this: Open MPI and Intel MPI. Intel MPI can use RDMA, so the presenter also planned to measure the difference with and without it.

The nodes were connected to a switch over the 25G SFP ports with direct-attach cables. The presenter flagged one concern: the switch runs at only 10 Gbps. They did not yet know whether bandwidth or latency matters more for these workloads, and went ahead with that switch. The parallel code and MPI setup instructions are published on GitHub and in a blog post.

6:38

Monte Carlo Calculation of Pi

The first test was a basic parallel job. Dots are placed at random inside a square, and the share that lands inside the circle gives an estimate of pi. The presenter explains that Monte Carlo methods suit parallel computing because each trial is independent. Results do not affect each other, and no thread or node waits for an earlier step to finish, so the CPU's resources are used efficiently. More threads should therefore mean a shorter run.

The run used 200 million samples. Results:

  • 1 thread: 42.3 seconds, with only CPU 0 at 100% utilization
  • 2 threads: 22.8 seconds, roughly half
  • 24 threads (one full node): 2.77 seconds
  • 48 threads (two nodes): 1.41 seconds
  • 72 threads (all three nodes): 0.97 seconds

The presenter observed that time falls sharply as threads increase but is not exactly inversely proportional to the thread count. They attribute the gap to time spent on work other than the calculation itself.

9:09

Fluid Simulation with OpenFOAM

The second test was numerical fluid simulation, such as computing how water flows. The presenter used OpenFOAM, which is open source and free.

The presenter gave a simplified explanation. The object is divided into a mesh, and the differential equations are solved algebraically by adding and subtracting values between neighboring cells. A finer mesh on the same model captures more detail but has more cells. Keeping the cell size and enlarging the simulated area also increases the cell count. Either way, more cells means more computation time, so parallel computing helps here too.

Unlike the Monte Carlo case, adding threads and nodes did not always make OpenFOAM faster. The presenter showed timings for a two-dimensional dam-break simulation. On a single node, run time generally fell as threads increased. The presenter had expected that connecting more nodes would cut the time further, but admits it was "not that naive." Adding nodes made the simulation take much longer.

Further testing showed two things. First, if each thread handles too few mesh cells, time spent on other processing outweighs the calculation. Second, the simulation finished faster when it did not use all 24 threads on a node. The presenter thinks this happens because the CPU and memory get congested within each machine, and communication between nodes also becomes congested. Their rule of thumb is that parallelizing only pays off when each thread gets roughly several hundred thousand mesh cells. At that size, calculation time is large relative to overhead.

11:44

Intel MPI and RDMA

Up to this point, inter-node communication used Open MPI. Because the E810 supports Intel MPI and RDMA, the presenter tried Intel MPI to see if it would speed things up. Intel MPI cut run time by 17% compared with Open MPI.

The presenter noted that the E810 appears to support RDMA with Open MPI as well. Setting that up looked difficult, so they gave up for this video and would like to try again later.

Their main conclusion from the OpenFOAM work is that, for this kind of workload, the difference between 10 Gbps and 25 Gbps bandwidth "is not actually very important." They believe network latency has a much larger effect.

12:34

Running DeepSeek-R1 671B on CPU and RAM

The last test used the large memory. LLM inference normally relies on GPUs and high-bandwidth memory. This time the presenter deliberately used only CPUs and system RAM. The model was a Q4_K_M quantization of DeepSeek-R1, a full-size model with 671 billion parameters. The model files alone are about 400 GB, and they were loaded into RAM across the three nodes.

After loading, the first node used 184 GB of its 192 GB (96%), the second 170 GB, and the third 169 GB. The presenter said they had never seen that much memory in use. Because free memory was pushed so close to the limit, the context size could not be increased and was set to about 20,000 tokens.

During a chat, the main node's CPU was busy and its Ethernet traffic stayed at about 100 Mbps. The other nodes showed no visible CPU processing, but they also kept up constant Ethernet traffic of about 100 Mbps. At one point Ethernet usage suddenly dropped, and the presenter was unsure why. The first prompt asked for a long talk, which was too slow, so the presenter changed it to ask for about 400 words. The output rate was about 1.1 tokens per second. The presenter reran the earlier prompt to see what had gone wrong and watched the model's reasoning appear.

The presenter admits the speed is poor next to something like ChatGPT, which is unavoidable for a local model. Seeing such a large model run at home is romantic, they say, but the speed brings you back to reality. They ended with an open question: is there a large model that runs faster on CPU?

15:14

Conclusions

For numerical computing, the presenter sees real value in the high core count and large RAM. Compared with workstations built for serious numerical work, though, it has fewer lanes connecting the CPU and memory, so it does not match them. For LLMs, the presenter still considers GPUs the proper tool. Inference works on CPU, but the presenter did not find it very practical. The remaining advantage is that a single unit with 192 GB of memory can hold a large model at home.