ここではおすすめのフルSSD構成Linuxワークステーション構築手順を記します。
ハードウェア
予算は30万円~300万円程度です。下記で250、150、50万円の構成例を挙げますが、CPUやメモリ、SSDのグレードを変えることで下限は30万、上限は300万程度になるでしょう。
予算250万円でパーツは以下の通り。完成品ワークステーションを購入する方が入手は容易です。九十九電機から似たような構成のワークステーションが販売されています。SSDだけは別途購入と取り付けが必要かもしれません。
- CPU: AMD Ryzen Threadripper PRO 7985WX (300万出せるなら7995WXも選べる)
- Motherboard: ASUS Pro WS WRX90E-SAGE SE
- SSD: Crucial T705 4TB CT4000T705SSD3 2枚 + Samsung 990 PRO 4TB MZ-V9P4T0B-IT 1枚
- RAM: Micron DDR5-4800 ECC RDIMM 64GB MTC40F2046S1RC48BA1R 8枚 (1枚で96GBのMTC40F204WS1RC48BRにすれば768GB搭載可能)
- Graphics Board: 玄人志向 GF-GT710-E1GB/HS (安いものでよい・マザーボード上にAspeed AST2600もあるので省略可)
- CPU Cooler: SilverStone SST-IG360-ARGB または Thermaltake TOUGHLIQUID 360 ARGB TRX40 Edition
- Power Supply: Seasonic VERTEX-PX-1200
- Thermal Compound: Thermal Grizzly Kryonaut
- Case: SilverStone SST-RM44 (4Uラックマウント兼ミドルタワー)
- ラジエーターファンはNoctua製NF-A12x25 PWM、背面ケースファンはNoctua製NF-A8 PWMに交換を推奨
予算150万円のパーツは以下の通り。完成品ワークステーションを購入する方が入手は容易です。九十九電機やサイコムやドスパラから似たような構成のワークステーションが販売されています。SSDだけは別途購入と取り付けが必要かもしれません。
- CPU: AMD Ryzen Threadripper 7980X (7970Xにして電源やSSDを妥協すれば100万円以内に収められる)
- Motherboard: ASUS Pro WS TRX50-SAGE WIFI
- SSD: Crucial T705 2TB CT2000T705SSD3 2枚 (CPU直結のM.2スロットに挿す) + Samsung 990 PRO 2TB MZ-V9P2T0B-IT 1枚 (チップセット下のM.2スロットに挿す)
- RAM: Micron DDR5-4800 ECC RDIMM 64GB MTC40F2046S1RC48BA1R 4枚 (1枚で96GBのMTC40F204WS1RC48BRにすれば384GB搭載可能)
- Graphics Board: 玄人志向 GF-GT710-E1GB/HS (安いものでよい)
- CPU Cooler: SilverStone SST-IG360-ARGB または Thermaltake TOUGHLIQUID 360 ARGB TRX40 Edition
- Power Supply: Seasonic VERTEX-PX-1000
- Thermal Compound: Thermal Grizzly Kryonaut
- Case: SilverStone SST-RM44 (4Uラックマウント兼ミドルタワー)
- ラジエーターファンはNoctua製NF-A12x25 PWM、背面ケースファンはNoctua製NF-A8 PWMに交換を推奨
Registered DIMMはCrucial以外だとv-colorやKingstonがおすすめですが、Crucialが安価で高品質だと思います。ただ、業者によってはKingstonしか取り扱いがないかもしれません。
予算50万円のパーツは以下の通り。メモリ、マザーボード、ケース、電源を安価なものにすれば25万円に収めることも可能。一般的なパーツを集めたものなので、BTO対応PCベンダー各社から同様のスペックのものが入手可能です。SSDだけは別途購入と取り付けが必要かもしれません。
- CPU: AMD Ryzen 9 9950X
- Motherboard: ASUS ROG STRIX X670E-A GAMING WIFI または ROG STRIX X670E-F GAMING WIFI (TUF GAMING B650-PLUS WIFI または TUF GAMING B650-E WIFIにすれば予算を抑えられる)
- SSD: Crucial T705 2TB CT2000T705SSD3 2枚 (CPU直結のM.2スロットに挿す) + Samsung 990 PRO 2TB MZ-V9P2T0B-IT 1枚 (チップセット下のM.2スロットに挿す)
- RAM: Crucial DDR5-5600 non-ECC UDIMM 48GBx2枚 CP2K48G56C46U5 2セット (32GB x4枚にすれば予算を抑えられる)
- Graphics Board: 玄人志向 GF-GT710-E1GB/HS (安いものでよい)
- CPU Cooler: CoolerMaster MasterLiquid ML360L V2 ARGB または Thermaltake TOUGHLIQUID 360 ARGB Sync
- Power Supply: Seasonic FOCUS-PX-850S
- Thermal Compound: Thermal Grizzly Kryonaut
- Case: SilverStone SST-RM44 (4Uラックマウント兼ミドルタワー)
- ラジエーターファンはNoctua製NF-A12x25 PWM、背面ケースファンはNoctua製NF-A8 PWMに交換を推奨
Socket AM5のRyzenでは、メモリを4枚挿してDDR5-5600で動作させるにはBIOS上でCPU VDDSOCとCPU VDDIOを最大で1.3V程度まで上げる必要があるかもしれません(CPU個体によって最適値は1.2Vだったり1.3Vだったりバラバラです。上げた方が良いとは限りません)。また、マザーボードによってはDDR5-3600でしか動作しません。ただし、DDR5-3600なら確実に動作します。不安な方はDDR5-3600で動作させて下さい。
なお、SSDはDRAMキャッシュを搭載していてHost Memory Bufferに依存しない製品を選んだ方が良いでしょう。Host Memory Bufferは、SSD上ではなくワークステーション本体のメモリをSSDのキャッシュとして使用する機能です。消費するメモリ容量はそれほどではありませんが、本体のメモリ帯域を消費してしまうため、計算の足を引っ張ってしまうことがあります。
ソフトウェア
OSはXubuntu 22.04LTSとします。インストールの際、SSDは1枚だけ取り付けるか、インストーラ上で製品名をよく確認して最もアクセスの遅いSSDに以下のパーティション構成でインストールします。
SSD /dev/nvme0n1 GUIDパーティションテーブル(GPT)
├ EFIシステムパーティション /dev/nvme0n1p1 マウントポイント:/boot/efi (512MB~1GB程度)
└ Xubuntu用パーティション /dev/nvme0n1p2 ファイルシステム:XFS マウントポイント:/ (残り全部)
OSのインストール後、さらにSSDを2枚取り付けてRAID0にして作業領域としますが、GPartedを使うので以下でインストールします。
sudo apt install -y gparted
GPartedを用いて/dev/nvme1n1 (追加SSDの1枚目)と/dev/nvme2n1 (追加SSDの2枚目)にGPTパーティションテーブルを作成し、新しいパーティション/dev/nvme1n1p1と/dev/nvme2n1p1を作成します(どうせRAID0アレイ作成後にフォーマットし直すのでフォーマットは何でもいい)。なお、SSDのデバイス名は異なる可能性があるので注意して下さい。もし異なった場合は、適宜読み替えて下さい。
RAID0化はmdadmで行うので、以下のコマンドでインストールと設定を行います。
#Install mdadm
sudo apt install mdadm
#Create RAID0 array
sudo mdadm --create /dev/md/RAID0Array --level=raid0 --raid-devices=2 --chunk=256K --verbose /dev/nvme1n1p1 /dev/nvme2n1p1
実行後、GPartedを起動して、/dev/md127に新しくGPTパーティションテーブルを作成し、XFSで全域を使ってパーティション/dev/md127p1を作成します。
次に、マウントポイントの/workを作成します。
sudo mkdir -p /work
GPartedを起動して、/dev/md127p1のUUIDを調べます。UUIDがわかったら、/etc/fstabに以下の行を追加します。
UUID=調べたUUID /work xfs defaults 0 0
再起動してdfでマウントされていることを確認します。Ubuntu Serverをインストールする場合はインストーラだけでここまでの全設定が可能なので、インストール後の作業を減らせます。
次にスワップファイルを/workに移す設定をします。ターミナルで以下を実行。
#256GBの空のファイルを作成(スワップファイルのサイズは搭載メモリサイズに合わせる)
sudo dd if=/dev/zero of=/work/swapfile bs=1G count=256
#ファイル読み書き権限を変更
sudo chmod 600 /work/swapfile
#スワップファイルとしてフォーマット
sudo mkswap /work/swapfile
#スワップファイルの有効化
sudo swapon /work/swapfile
この時点では再起動すると作成したスワップファイルが使われなくなるので、/etc/fstabで/swapfileをスワップファイル領域としてマウントしている部分を/work/swapfileに書き換えて再起動する。
再起動後、freeコマンドやsudo swapon --showでSwapの容量が256GBになっていることを確認したら、/swapfileを削除してよい。
最終的なSSDとパーティションの構成は以下の通り。
SSD /dev/nvme0n1 GUIDパーティションテーブル(GPT)
├ EFIシステムパーティション /dev/nvme0n1p1 マウントポイント:/boot/efi
└ Xubuntu用パーティション /dev/nvme0n1p2 ファイルシステム:XFS マウントポイント:/
SSD x2 RAID0 /dev/md127 GUIDパーティションテーブル(GPT)
└ 作業用パーティション /dev/md127p1 ファイルシステム:XFS マウントポイント:/work
└ スワップファイル /work/swapfile
XubuntuセッションがXfceセッションになってしまうことがある場合の対策
ここで推奨しているXubuntuデスクトップの場合、しばしばXubuntuセッションではなくプレーンなXfceセッションに誤って入って設定が変わってしまうことがあります。このようなことを防ぐには、いくつかの環境変数の値をxubuntuにしておきます。ユーザーが各自~/.xsessionrcで設定する、新規ユーザーに自動設定されるように/etc/skel/.xsessionrcを作成する、全ユーザーに強制的に適用されるよう/etc/X11/Xsessionに書き加える、xrdpでのリモート接続のときだけ全ユーザーに強制的に適用するなら/etc/xrdp/startwm.shに書き加える、などします。設定するのは以下の環境変数です。
- GDMSESSION
- DESKTOP_SESSION
- XDG_SESSION_DESKTOP
書く内容は以下の通りです。
export GDMSESSION=xubuntu
export DESKTOP_SESSION=xubuntu
export XDG_SESSION_DESKTOP=xubuntu
/etc/X11/Xsessionや/etc/xrdp/startwm.shに書く場合は、1行目のshebangの下に書くようにご注意下さい。
ワークステーションが複数台ある場合
複数台の計算機がある場合、下記のようなことがしたくなります。
- 複数台のマシンでデータを共有したい
- 複数台のマシンで同じユーザー名とパスワードでログインしたい
こういうケースで必要なソリューションは以下になります。
- データを共有できるNASまたはファイルサーバ
- ユーザー認証情報を共有できる認証サーバ(多くの場合ディレクトリサーバ)
上記の要件は1台のNASまたはファイルサーバを導入すれば満たすことができます。QNAPやSynologyのNASを導入するのがおすすめです。管理の手間がかかってもいいならLinuxで自分で立てることもできます。その際、共有フォルダにはネットワーク越しにアクセスするわけですが、通常の1000BASE-Tはだいぶ遅いです。そこで、10 Gigabit Ethernet (10GbE)や25GbE・40GbE・100GbEを導入するのが良いでしょう。QNAPやSynologyのNASは標準、または拡張カードで対応できるものがあります。ワークステーション側には10GbE対応のNetwork Interface Card (NIC)を挿します。おすすめのハードウェアは下記の通りです。
- NAS: QNAP製でPCIeスロットへのNIC増設に対応しているNAS
- NIC: Intel X520-DA1かX520-DA2互換品(Amazonやオリオスペックで格安品あり)かBCM57810チップ搭載品(QNAP NASは非対応なので計算機に使用する)、またはMellanox ConnectX旧世代の中古品(AliExpressで安く買える。40GbEならMCX354A-FCBTを推奨)
- ケーブル: FS.com・FiberJP.com (海外通販)か10Gtek (Amazon)のDirect Attach Copper (DAC)ケーブル(短距離・安い・省電力)かActive Optical Cable (AOC) (長距離対応・やや高価・やや消費電力と発熱多い)
- ハブ(台数が多い場合必要): MikroTik CRS326-24S+2Q+RM (24x 10GbE SFP+と2x 40GbE QSFP+)かMikroTik CRS518-16XS-2XQ-RM (16x 25GbE SFP28と2x 100GbE QSFP28)かTP-Link TL-SX3016F (16x 10GbE SFP+)かTP-Link TL-SX3008F (8x 10GbE SFP+)かQNAP QSW-M1208-8C (12x 10GbE SFP+ (うち8つはRJ45と排他利用))かUbiquiti USW-Pro-Aggregation (28x 10GbE SFP+と4x 25GbE SFP28)
10GbEと25GbE・40GbE・100GbEは、1000BASE-TまでのRJ45端子ではなく、SFP+またはQSFP+という端子で接続します。RJ45接続の10GBASE-T規格もありますが、発熱が多いため、その熱で性能が低下する傾向がある上、レイテンシもやや大きいです。というわけで、できるだけSFP+・QSFP+を使うのがおすすめです。なお、25GbEはSFP28、100GbEはQSFP28という端子を使用しますが、それぞれSFP+とQSFP+の上位互換になります。
予算ですが、NASはHDD 4ベイと10GbE 1ポート対応品で10万円、16TB HDDが1台当たり5万円、NICが1枚7千円、ケーブルが1本2千円、もし必要ならハブが5万円といったところでしょうか。30万円と少々くらいが下限になると思います。
設定方法は下記をご覧下さい。
- UbuntuでQNAP NASの共有フォルダを/homeとしてNFSマウントする
- QNAP NASでLDAPサーバを設定して共用計算機のユーザー管理を一元化する
- UbuntuをLDAPサーバのクライアントにしてユーザー認証を一元化する
- QNAP NASでドメインコントローラを設定して共用計算機のユーザー管理を一元化する
- UbuntuでActive Directoryドメインに参加してユーザー認証を一元化する
認証サーバはLDAPサーバとActive Directoryドメインコントローラの2種類があり、違いはWindowsに対応するかどうかです。Windowsも同様に認証とファイル共有したいなら後者にして下さい。
また、上記を更に推し進めると、以下のような希望を抱くようになります。
- 1台のマシンに沢山の計算処理(ジョブ)を命令すれば、自動的に多数のマシンにジョブを分配して処理して欲しい
これがまさにスーパーコンピュータで行われていることの一つですが、個人や小規模な組織でも、小規模なスパコンとも言えるPCクラスタを作成することができます。実はもう上記でほとんどできています。これに必要なのは前述のファイルサーバ、認証サーバ(と複数台の計算機)に加えて以下のようなものになります。
- ジョブを受け付けてキューに登録し、計算機資源に適切にジョブを配分するサーバプログラム
- サーバから配分されたジョブを実行するクライアントプログラム
前者のサーバプログラムをジョブスケジューラとかジョブキューイングシステムと呼びます。多くの場合、後者のクライアントプログラムもセットになっています。かつてはPBSとかLSFとかCondorとかGridEngineというシステムがありました(GridEngineは今もあります)が、現在も活発に開発されているのはSlurm Workload Managerです。Ubuntuの標準リポジトリにも収録されていますので、容易に導入することができます。サーバプログラムがslurmctld
、クライアントプログラムがslurmd
となり、それぞれサーバマシン=ヘッドノードとクライアントマシン=計算ノード上で動作します。
Slurmの設定方法は下記ページをご参照願います。
ヘッドノードは計算ノードを兼ねることもできますので、計算機複数台のうち1台をヘッドノード兼計算ノード、残りを計算ノードとすれば良いでしょう。また、ヘッドノード専用機を用意することができるなら、その方が良いでしょう。ヘッドノード兼計算ノードでは計算ノード専用機よりも利用できる計算資源がサーバプログラムの分だけ減少するためです。
Linuxの参考書
ユーザーが自分だけの場合は以下のどれかを読んでおけばいいと思います。
- 三宅英明・大角祐介(2024)「新しいLinuxの教科書 第2版」, SBクリエイティブ, ISBN: 978-4-8156-2431-6.
- 奈佐原顕郎(2016)「入門者のLinux」, 講談社, ISBN: 978-4-06-257989-6.
- Cannon, Jason (2014) "Linux for Beginners", Createspace, ISBN: 978-1496145093.
複数人で共用する計算機で、管理者の方は下記のものを読んでおくのがおすすめです。
- 大竹龍史・山本道子(2019)「本気で学ぶLinux実践入門」, SBクリエイティブ, ISBN: 978-4-7973-9764-2.
- Cannon, Jason (2016) "Linux Administration", Amazon, ISBN: 978-1523915958.