Home 5Gが4Gから5Gになって下り650Mbpsになった話

田無には何もない。tanasinn…

経済的な理由で田無の片田舎に引越す羽目になりました。諸事情あって田無以外の選択肢が無かったのです。40歳を過ぎての引越しは体力的に厳しく、消耗する日々が続きましたが何とか引越しを終わらせることが出来ました。

田無は本当に何もないエリアです。駅前はパチンコ屋、青梅街道はシャッター街、新青梅街道沿いのロードサイド店だけがやけに栄えている、と典型的な『郊外』です。

田無には何もない。田無タワーと田無神社だけが地元民の心のふるさとである

引っ越したらドコモ5Gエリアになった

何も無い上に駅からも遠く、市指定のゴミ袋は10枚600円。コーナンが無いと生きていけない。そんな地獄のような田無ですが唯一の救いは『ドコモ5Gエリア内』だったことです。

田無駅周辺には新青梅街道と青梅街道沿いにドコモの5G基地局が配備されており、街道から近ければ5Gエリアとなっています。

田無駅周辺には新青梅街道と青梅街道沿いにドコモの5G基地局が配備されており、街道から近ければ5Gエリアとなっている

古い集合住宅には光回線を引けない。そこで……

古い集合住宅には古い銅の電話線しか引かれておらず、大家が役所仕事だと新たに光回線を引き込むことが出来ません。ping値を考慮するとネットゲームなどでは光回線が快適なのですが、次善の手段としてNTTドコモの『Home 5G』があります。

要は据え置き型のモバイルルーターを窓際に置きっぱなしにして、無線で自宅のインターネットを賄うというサービスです。

NTTドコモの5G据え置きルーター『HR01』。5G通信中は青ランプが点灯する

まさかの下り650Mbps(昼と夜のラッシュアワーを除く)

ドコモショップで利用住所変更をしてルーターの電源ON。5G通信を示す青ランプの点灯を確認し、speedtestを走らせたところ

『Home 5G』で5Gガチャに勝つと下り実効650Mbpsを享受出来る

なんと650Mbpsも出るじゃないですか!

むかし光回線を引いていたころも下りは実効100Mbpsだったので、これは人生最高速度です。ping値は30ms前後と遅いのですが、FPSなどリアルタイム性が高いゲームをやらなければ問題はありません。

上りは20Mbps~30Mbpsなので自宅サーバー用途にはあまり向いていませんが、データベース&計算メインのLinuxサーバーを20台並べるような用途では日々の

sudo apt update -y; sudo apt upgrade -y; sudo apt autoremove

が1台数10秒で終わる安心感は何物にも替えがたいメリットです。もちろんWindowsの糞重い定期アップデートに耐えられるのも大きい。なるべく減らしたいけど。

というわけで、暗闇が続く人生に一筋の光を垣間見る今日このごろです。

近況のご報告(2022/8/30)

職に続いて家をも失う

最近、ブログの更新が途絶えており友人知己各位には申し訳なく思っております。というのも、住んでいる団地が来年末をめどに取り壊しとなり、定期賃貸借契約のため住宅供給公社(JKK)から何の補償も無しに有無を言わさず追い出されることになったからです。

定期賃貸借契約。民間のアパートにお住まいの方はあまり聞いたことが無いと思いますが、恐ろしい契約です。一般的に賃貸契約では賃借人の生活を守るため権利が保護されており、大家はそう簡単に入居者を追い出すことはできません。どうしても賃貸物件を取り壊したい場合、大家が入居者に引っ越し代金など相応の金銭的補償をして退去してもらいます。

しかし「それではカネがかかって困るし面倒くさい」ということで法改正されて生まれた制度が『定期賃貸借契約』です。入居時に定期賃貸借契約を結ばせることで、定められた期間の満了後は有無を言わさず、金銭的な補償もなしに入居者を追い出せるようになったのです。

最近まで定期賃貸借契約は店舗など商業用の物件が中心で、居住用の物件でこの情け容赦ない契約を結ばせるケースは少なかったのです。しかしJKKは築年数が古い団地を中心に定期賃貸借契約化を推進しており、無職の貧乏人はもはや無期で賃貸物件に入居することは出来なくなりつつあります。契約の際は引越し代金の自己負担なども含めて結局割高になるリスクに十分ご注意下さい。

私はまだ40代で貯金も多少は残っていますのでまだ何とかなりますが、70代以上の高齢者に定期賃貸借契約を強要するのは、あまりにも残酷ではないでしょうか。新自由主義、ここに極まれり。

もう自宅クラスターどころじゃない

自宅に何台もサーバーをお持ちの方はよくご存じだと思いますが、サーバーの引越しは電源ケーブルやLANケーブルなど多数のケーブルを再配線する必要があるうえ、輸送時にサーバーやルーターのうち何台かは壊れる覚悟が必要なくらい危険で面倒な作業です。

流行りのクラウドの方が、圧倒的に楽なんですよ。そう、お金があればね。

というわけで、念願のスケーラブルなデータベースクラスタの構築(今はAzure Database for PostgreSQL – Hyperscale (Citus)を想定)は引越し後まで持ち越しとなりました。ホストOSとしてのUbuntu 22.04 LTSの本格運用も同様に引っ越し後に延期としました。いま組んでもどうせ引越しで混乱してぶっ壊れるだけですからね……。

ブログの更新がほぼ止まった理由は、お察し頂ければと思います。

職も家もない流民(ノマド)の頼みの綱、公衆Wi-Fi

そんなわけで無職宿無しとなった私は、今日も公民館でこの文章を書いています。公民館は図書館と異なりWi-Fiが無いところがほとんどで、これまではスマホのギガを消費してデザリングしてしのいでいました。

ところが、最近都内某所の携帯ショップでiPhone目当てでUQモバイルを契約したところ、オプション(強制契約)のauスマートパスプレミアム(月額499円[税込548円]※au以外の方もOK)にau Wi-Fiアクセスという公衆Wi-Fiがついてきました。携帯キャリアはWi-Fiオフロードと言って混み混みのトラフィックをなるべくWi-Fiに逃がそうとしています。このau Wi-Fiアクセスは専用アプリを入れることで、ギガを消費せずにWi-Fiオフロードするサービスになっています。

近所の公民館、実は↓のステッカーが貼ってあって前から気になってはいたのです。

『au Wi-Fiつかえます』ステッカー

そこでUQのSIMを挿したスマホでau Wi-Fiアクセスのアプリを起動して接続し、PCや他のスマホからデザリングしたところ、無事(キャリア回線ではなく)Wi-Fiに接続したことを確認しました。

これで(スマパスはどうせ7か月間解約出来ないので)実質無料で公民館のWi-Fiが使い放題になりました。

一般人がネットを使えない公共施設でネットが使えると有利

わりとネット関係に詳しいはずの私ですら、つい最近まで「公共Wi-Fiはないが通信キャリアのWi-Fiなら使える公共施設」があることを知りませんでした。Wi2など単独の公衆Wi-Fiサービスに対応したエリアは飲食店など有料サービスを契約しなくても元から無料のWi-Fiがあるところばかりなので、有料の公衆サービスに契約する意味を全く感じていませんでした。

しかし、非常に局所的とは言え通信キャリアのWi-Fiだけに対応した公共施設があることで、「他の人がネットをしに集まらない場所で悠々とネットが使える」という恩恵にあずかれることが分かりました。このような場所がもしお近くにあれば、キャリアの公衆Wi-Fiサービスはアニメとか観なくても十分に元が取れると思います。

Ubuntu 22.04 LTSを本当にデスクトップとして使う〜NVIDIA GPU設定【2022年5月版】

Ubuntu、デスクトップとしても使ってます。本当に💦

Ubuntu 22.04 LTS デスクトップ版を自宅PCクラスタで使う話を連載しています。Linux使いの方でも「でも、端末はWindowsだよね?」「IT業界でスタバでドヤるならMBP(MacBookPro)だよね?」とお考えの方は多いです。本気でLinuxを普段使い出来ると思っている日本人は、未だに意外と少ないのが実態です。

MBPドヤリングはともかくとして、Excelのフル機能が使えない等の理由でWindowsを手放せないのは事実です。しかしGoogle Chromeの肥大化進化でオフィス機能のほとんどがGoogleスプレッドシートなどのWebアプリで賄えるようになった今では、本当にWindowsでなければ困る局面は非常に少ないと感じています。

私は無職になって久しい今でも気持ちだけはWeb担の端くれなので、基礎的なリテラシー維持の為にWindowsのほかMacBookPro、Chromebook、iPhone、iPad、Androidスマホ/タブレットなど一般的に使われているOSの端末は全て個人所有しています。その上で申し上げると、「モバイル用途のPCはUbuntu Linuxでほとんど困らない」との認識です。

Windows11ではインテルCore i 第7世代以前のCPUはサポート外となりました(7820HQなど例外あり)。結果、以前の中古PCやリース落ちPCが値崩れし、とてもお買い得になっています。一昨年は5万円を滅多に切らなかったフルHD&SSDノートも今では5万円を切るものがチラホラ出てきました。端末として割り切るなら個人的なイチオシは『ELITEBOOK Folio G1』です。このようなお古のノートにUbuntuを入れて再生させるわけです。

お古の👍ノートをUbuntuで再生。SSD&フルHDなら今でも快適👍

さらにディープラーニングなどの機械学習フレームワークLinuxベースで作られたものが多く、特に「CLIに慣れた方はWindowsよりLinuxの方が便利」ということも実は多いのです。

Ubuntuでディープラーニング。鬼門はGPUドライバ

とは言え、UbuntuがWindowsに及ばない点はあります。それがドライバーのインストール。周辺機器ベンダーがWindows第一でドライバーを開発しているので、Linuxでの対応は遅れがちです。特にGPUのドライバコケると画面表示出来なくなるので、LinuxでGPUを使い倒したい人の最初の鬼門となります。

そこで今回はお手軽GPUであるNVIDIA GeForce GTX 1650を搭載したゲーミングノートPC『ASUS TUF Gaming A15 FA506IH FA506IH-R5G1650AS』(AMD Ryzen5 4600H/8GB⇒32GB・SSD 512GB⇒512GB+2TB/1,920×1,080ドット (フルHD) (144Hz)/15.6インチ/フォートレス・グレイ)にUbuntu 22.04 LTSを入れた上でGPUドライバのインストールに挑戦しました。

GeForce GTX 1650搭載のゲーミングノートPC。ゲームには物足りないがディープラーニングのサンプルコードを動かす程度なら十分なGPU性能

UbuntuがGPUの存在を認識しているかどうかを確認

$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2/1-2:1.0 ==
modalias : usb:v0BDAp8812d0000dc00dsc00dp00icFFiscFFipFFin00
vendor   : Realtek Semiconductor Corp.
model    : RTL8812AU 802.11a/b/g/n/ac 2T2R DB WLAN Adapter
driver   : rtl8812au-dkms - distro free

== /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0 ==
modalias : pci:v000010DEd00001F99sv00001043sd000018BFbc03sc00i00
vendor   : NVIDIA Corporation
model    : TU117M
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-510 - distro non-free recommended
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-510-server - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

上記のコマンドで表示された「vendor : NVIDIA Corporation model : TU117M」がGTX 1650です。ドライバは「driver : nvidia-driver-510 – distro non-free recommended」とオススメ表示が出ているので、これを入れてみます。

$ sudo apt install nvidia-driver-510
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下の追加パッケージがインストールされます:
……

インストールは10分ほどで終わるので、再起動します。

$ nvidia-smi
Thu May 12 18:47:13 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.60.02    Driver Version: 510.60.02    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   45C    P8     6W /  N/A |      8MiB /  4096MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1750      G   /usr/lib/xorg/Xorg                  4MiB |
+-----------------------------------------------------------------------------+

「Driver Version: 510.60.02 CUDA Version: 11.6」と表示されており、ディープラーニングで使うCUDAも無事入っていることが確認出来ました。

TensorflowでGPUの動作確認

とは言え、実際にGPUを使ってみないと正しく動いているのか分かりません。というわけで、機械学習系のフレームワークであるAnacondaをインストールして使ってみます。

$bash ./Anaconda3-2022.05-Linux-x86_64.sh
$conda update -n base conda
$conda update anaconda
$conda update -y --all
$conda install tensorflow-gpu==2.4.1

動作確認用のコードを実行してみます。

$ python
Python 3.9.12 (main, Apr  5 2022, 06:56:58) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tensorflow.python.client import device_lib
2022-05-12 18:53:47.784386: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.1
>>> device_lib.list_local_devices()
2022-05-12 18:53:51.799093: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  SSE4.1 SSE4.2 AVX AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-05-12 18:53:51.802081: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2022-05-12 18:53:51.831519: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-12 18:53:51.832063: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1720] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: NVIDIA GeForce GTX 1650 computeCapability: 7.5
coreClock: 1.515GHz coreCount: 14 deviceMemorySize: 3.82GiB deviceMemoryBandwidth: 178.84GiB/s
2022-05-12 18:53:51.832111: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.1
2022-05-12 18:53:51.849984: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublas.so.10
2022-05-12 18:53:51.850051: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublasLt.so.10
2022-05-12 18:53:51.860952: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcufft.so.10
2022-05-12 18:53:51.864006: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcurand.so.10
2022-05-12 18:53:51.882123: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcusolver.so.10
2022-05-12 18:53:51.885419: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcusparse.so.10
2022-05-12 18:53:51.918256: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudnn.so.7
2022-05-12 18:53:51.918459: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-12 18:53:51.918860: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-12 18:53:51.919152: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1862] Adding visible gpu devices: 0
2022-05-12 18:53:51.919358: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.1
2022-05-12 18:53:52.570930: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1261] Device interconnect StreamExecutor with strength 1 edge matrix:
2022-05-12 18:53:52.570970: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1267]      0 
2022-05-12 18:53:52.570977: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1280] 0:   N 
2022-05-12 18:53:52.571411: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-12 18:53:52.571620: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-12 18:53:52.571762: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-12 18:53:52.571880: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1406] Created TensorFlow device (/device:GPU:0 with 3410 MB memory) -> physical GPU (device: 0, name: NVIDIA GeForce GTX 1650, pci bus id: 0000:01:00.0, compute capability: 7.5)
2022-05-12 18:53:52.573073: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 14858614513891176676
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 3575906304
locality {
  bus_id: 1
  links {
  }
}
incarnation: 13770775266605951589
physical_device_desc: "device: 0, name: NVIDIA GeForce GTX 1650, pci bus id: 0000:01:00.0, compute capability: 7.5"
]

無事「pciBusID: 0000:01:00.0 name: NVIDIA GeForce GTX 1650 computeCapability: 7.5
coreClock: 1.515GHz coreCount: 14 deviceMemorySize: 3.82GiB deviceMemoryBandwidth: 178.84GiB/s」と表示されており、tensorflowからGPUが認識出来ていることが分かりました。

ついでにPytorchも

最近社名が変わったり株価がごにょごにょしたり何かとお騒がせなMeta Platforms社(旧称Facebook)のPyTorchも、ついでに入れてみます。

公式サイトに行くとコマンドを教えてくれるので、そのとおりに入力します。

さいきん流行りのWebでポチポチするとコマンドが出るやつ
$conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

condaのインストールは依存関係の処理で時間がかかりますが、10分くらいで完了すると思います。

ディープラーニング超入門的な記事は食傷気味なので、Jupyter Notebookなどを使ったディープラーニングのお試しは後日、気が向いたら挑戦しようと思います。

Ubuntu 22.04 LTSのgnome-remote-desktopが自宅PCクラスタの救世主でない理由【2022年5月版】

Ubuntu 22.04 LTSから標準でリモートデスクトップ対応。しかし……

Ubuntu Linuxは、従来Windowsと異なり標準ではリモートデスクトップ(RDP)の機能がありませんでした。とは言え、Linuxでは必要なものだけ後から入れるのが当たり前なので、必要な人は自力でxrdpなどのRDPアプリを入れて普通にWindowsや他のLinux端末からRDPしていました。

私も自宅クラスタのUbuntuには全てxrdpを入れています。自宅クラスタは省スペースの弁当箱PCを並べており、少しでもコンパクトにまとめるため普段はキーボードやマウス、モニタを外しています。必要な時だけUSB稼働のモバイルモニター(HDMI/DisplayPort両対応)やタッチパッド一体型USBキーボードを繋いで保守作業を行っています。

自宅クラスタでは必要な時だけタッチパッド一体型USBキーボードをつなぐ

リモート管理は、硬派なセキュリティ重視型エンジニア様は大抵「sshでやれ」とおっしゃいます。しかし、Linux用のサーバーソフトの多くがWebブラウザ管理でかつ初期設定ではローカルでしかアクセス出来ないこともあり、sshだけで済ませるのは面倒臭いです。ストイックな方を否定する気はありませんが、少なくとも私の自宅クラスタはRDPで管理したいです。

こんなRDP大好きユーザーの救世主になる!と思われたのがUbuntu 22.04 LTSから標準搭載された『gnome-remote-desktop』です。しかし結論から言えば、これは自宅クラスタのリモート管理には使い物にならないゴミソフトです。

ダメな理由① Windowsからつながらない

Ubuntu 22.04のインストール後、真っ先に設定画面を開きremote desktopとremote controlをONに変更しました。そしてWindowsからRDPしてみると

Windowsからgnome-remote-desktopにつながらない

なんということでしょう😱同じUbuntuのRemminaからはつながるのに……。

RDPはそもそもWindows発祥のプロトコルです。にも拘わらずWindowsから繋がらないと知った瞬間「こいつ、やる気ねえな」と悟りました。

ダメな理由② ログアウトするとつながらない

さらになんと、gnome-remote-desktopは「端末にユーザーがログインしている間しかつながらない」という超絶糞仕様になっているではありませんか。ログアウトしなくても、端末からモニターケーブルを引き抜いた瞬間に切断される仕様です。

そもそも、gnome-remote-desktopは「Windows Homeを使っているような超一般人が操作で困った時に情シスが遠隔でサポートする」ような目的で作られていたのでした。Ubuntu Desktopは確かにデスクトップOSですが、わざわざセキュリティのためにログアウト状態での接続を不可にしなくても良いではないですか。これにはさすがに開発者の明確なsshも使いこなせないのにリモート管理すんなという悪意を読み取らざるを得ません。

【結論】本当の救世主はやはりxrdpだった

途方に暮れてウェブを検索しまくったところ、素晴らしいページを発見しました。

xrdp-installer-1.4.sh

xRDP – Easy install xRDP on Ubuntu 18.04,20.04,21.10,22.04 (Script Version 1.4)

The script xrdp-installer-1.4.sh can be run against all supported Ubuntu Operating System. Version 1.4 has been updated and it will detect Ubuntu 22.04 as a supported Operating system. The script has been mainly tested against Ubuntu Gnome desktop. However, the script tries to detect the Desktop interface in use and might be able to work against some other desktop interface such as Budgie, Plasma, Linux Mint, Gnome…(Best effort !)

Griffon’s IT Library

ネ申だ……😭

何が素晴らしいかというと「Ubuntu 22.04 LTSに糞なgnome-remote-desktopが標準搭載されてもxrdpへのニーズが無くならないことを百も承知で、リリース直後に速攻で対応した」という点に尽きます。

こういう素晴らしい野良ハッカーのおかげで、ぼくらは今年も快適なUbuntuライフを手軽に堪能出来そうです。めでたしめでたし🙌

Ubuntu 22.04 LTSで自宅PCクラスタを構築する【ハードウェア&初期インストール編】

まずはバラすところから

 クラウド全盛のご時世ですが、当記事では「弁当箱PCをバラす」シーンからスタートです👍

クラウドの仮想マシンはCPUやメモリ、SSDなど多彩な構成からサクッと選べて便利です。でも、クラウドからITに入った世代はCPUやメモリ、SSDが具体的にどういうモノか知らない方も多いのではないでしょうか。どうせなら、知っておいた方がいいですよね🤗

というわけで、バラしてみます。

Lenovo ThinkCentre M75q Gen2の上フタを開いたところ

PCのフタを開けるには基本的にプラスドライバーがあれば十分ですが、ドライバーのサイズがネジと合わないと力を込めても回らずネジ山を潰してしまうという恐ろしい罠があるので、精密ドライバーセットを一式、揃えておきましょう。

Lenovo ThinkCentre M75q Gen2は、HDD無しモデルを選んでも2.5インチマウンターが付属するようです。保守部品は入手に手間がかかることも多いので、この配慮はありがたいですね。というわけで早速マウンターを外します。

Lenovo ThinkCentre M75q Gen2の2.5インチマウンターを外したところ

機械が苦手な方は既にこの写真に恐怖を覚えるかも知れませんが、周辺機器の増設はレゴブロックレベルの難易度です。2.5インチマウンタではSATAケーブルがマザーボード上のコネクタから外れることがあると思いますが、ただの嵌め込み式なので落ち着いてはめ直しましょう。大丈夫です、たぶん。

2TBの2.5インチSSDをデータドライブとして増設!

今回はLenovo ThinkCentre M75q Gen2の2.5インチマウンターに、HDD(ハードディスク)ではなく2TBの2.5インチSSDを増設します。

Lenovo ThinkCentre M75q Gen2の2.5インチ SSDを装着したところ

HDDは内部でディスクが物理的に回転しているので、一般的にSSDより故障のリスクが高いと言えます。純粋なファイル保管用で一日数回しかアクセスしないような用途なら安価なHDDは今でも選択肢となり得ますが、自宅クラスタのサーバー用途では極力SSDを選びましょう

SSDはM.2 2280というガムをひと回り大きくしたサイズの規格が主流となりつつありますが、弁当箱PCではM.2 2280のスロットがひとつしかないことが多く、2台目のデータドライブは2.5インチにするのが現実的です。2.5インチ SATAはSSDとしては無駄にデカいですが、値段的にも少しお安めなので、悪い話ではありません。

なお、2.5インチはSATA3という規格で転送速度は最大6Gbpsです。M.2はSATA3とNVMeの2つの規格がありますが、主流のNVMe最大20Gbpsと高速化しています。とは言え、NVMeでも実効速度に大きな違いはなく、発熱が激しいのが現状のようです。要は「HDDではなくSSDであることが大事で、性能は大差ない」そうです。

SSDを選ぶ際にもうひとつ重要なのは「予算が許す限り大容量のものにする」ことです。というのも、SSDなどの不揮発性メモリは書き込み回数に限界があり、残り容量が少なくなると同じ領域に繰り返し書き込むため劣化しやすいと言われているからです。そういう意味でも、2022年現在では2TBの2.5インチ SATA SSDはコスパ的に悪くない選択肢と言えます。なお、今回は『SanDisk SDSSDH3 2T00』を選びました。

メモリとM.2 NVMe SSDの交換・増設

続いて、Lenovo ThinkCentre M75q Gen2の裏蓋を開きます。

Lenovo ThinkCentre M75q Gen2の裏蓋を開く

この機種のマザーボードはスロットが両面実装になっており、メモリとM.2 SSDは裏側です。まず、裏蓋をスライドしてマザーボードを露出します。

Lenovo ThinkCentre M75q Gen2の裏蓋を開くと、メモリとM.2 SSDのスロットがある

Lenovo ThinkCentre M75q Gen2の裏蓋を開くと、メモリとM.2 SSDのスロットがあります。交換を前提に最小構成で注文したので、メモリ8GB、SSD256GBとなっています。メモリは64GB、M.2 SSDはNVMe 1TBに交換しました。

メモリは64GB、M.2 SSDはNVMe 1GBに交換する

SSDを2台構成にしているのは、システムドライブ(M.2 NVMe)とデータドライブ(2.5インチSATA)を分けるためです。あとあと設定が面倒にはなりますが、大容量データを扱うためには乗り越えたい壁です。クラスタ構成が前提であれば、1台構成でも良い気がしますが……💦

なお、今回はメモリは『Transcend JM3200HSE-32G』2枚、SSDは『Western Digital WD Blue SN570 1TB』を選びました。

周辺機器を認識したかどうかBIOSでチェック

周辺機器の増設が終わったので、ふたを閉じて弁当箱PCを起動します。OSを入れる前に、まずBIOSで周辺機器を認識したかどうかをチェックします。

USBメモリを優先起動する設定にするついでに、SSDを認識したかどうかチェック

BIOS画面の『USB HDD』がUSBメモリ、『M.2 Drive 1』がM.2 SSD(WD Blue SN570 1TB)、『SATA 1』が2.5インチ SSD(SanDisk SDSSDH3 2T00)です。どちらも正しく認識しました🙌

メモリも65536MBとなり、無事3200MHzでの動作を確認

システム概要の画面で、メモリを64GB認識して3200MHzで動いていることも確認します。これで安心🙌

SSDやメモリは未だに相性問題があり、たまにではありますが交換しても動かないことはあります。PCメーカーか周辺機器メーカーの動作確認リストに載っているのが理想ですが、コスパ的になかなかそうもいきません。先人の交換履歴をウェブ検索で確認して、動いているパーツを選ぶのが次善策です。安くて動作が安定したパーツはよく使われているので、地道に検索すれば自分の目的に合ったものが見つかると思います。

Ubuntu 22.04 LTSをUSBメモリでインストールする

手ごろなUSBメモリを購入し、Ubuntu 22.04 LTSISOイメージをダウンロードして格納します。BitTorrentでもダウンロード出来るので、TransmissionなどのBitTorrentクライアントをお使いの方にはお勧めです。

UbuntuのダウンロードはBitTorrentにも対応している

ISOイメージをUSBメモリに格納して起動ドライブにするには、専用のアプリを使います。私はWindowsも使う派なので、Rufusを愛用しています。DVDに焼いてDVDドライブから起動することも可能だとは思いますが、さすがに円盤を常用する時代ではないと思います。USBメモリにもType-C化の波が押し寄せているので、Type-AとType-Cの両方のコネクタがついたUSBメモリをお勧めします。

今回は敢えてサーバー版ではなくデスクトップ版をインストールします。エンジニア的にはセキュリティ上の理由から「最小構成が常に正義」ですが、私は基本情報技術者ではあるものの硬派な本職さんではありませんので、ふだん使いのUbuntuでそのままサーバーやクラスタを管理できる利点を優先しました。おそらく鯖缶ガチ勢の皆様はUbuntuではなくRHEL系のLinuxをお使いだと思いますので、この辺は棲み分け、という感じです🤗

毎度のことながら、初回の起動がうまくいくかドキドキします……。

USBメモリからUbuntu 22.04 LTSのインストーラを起動する

今回は無事、起動しました🙌

最近はLinuxも市民権を得てきたのでPCメーカーがLinuxを公式にサポートすることも多くなってきました。もちろん最近出たばかりのOSをサポートすることはまず無いのですが、Linuxを公式にサポートしている機種の方がドライバなどを含めて安定動作する可能性が高いとは言えると思います。私はコスパがすべてですが💰

Ubuntu 22.04 LTSのインストーラが周辺機器を認識しているかを確かめる

Ubuntu 22.04 LTSのインストーラが起動したら、設定画面で周辺機器を認識しているかチェックします。BIOSが認識しているからといってOSも正しく認識できるとは限らないからです。

Ubuntu 22.04 LTSのインストーラがメモリとSSDを認識しているかチェックする

『Memory』が64GiB、『Disk Capacity』が3.0TBと表示されています。これで、ほぼ安心です🙌

SSDの初期化とパーティションの設定

インストーラを起動し、指示に従ってポチポチ進めていきます。初心者が詰まりやすいほぼ唯一の設定項目がSSDの初期化とパーティションの設定です。ディスクが1台なら言われた通りにポチポチすれば良いのですが、今回はディスクが2台なのでM.2ドライブにOSを決め打ちで入れる必要があります。

SSDの初期化とパーティションの設定は初心者のつまづきポイント

パーティションの設定にはUNIX系のOSに特有のパスという概念を理解する必要があります。すべてのデバイスやデータは『/』というルートパスの下にツリー構造でぶら下がっています。ルートパスの『/』をOS用のドライブ(/dev/nvme0n1)にマウントすることで、M.2ドライブにOSが入ります。ファイルシステムは今回『ext4』としました。

最近のPCではこれとは別に、512MB前後の『efi』パーティションを作る必要があります(無いと怒られます💦)。SATAのデータドライブ(/dev/sda)は『/data』にマウントしました(特に命名ルールはありません)。

あとはインストーラの完了を待ち、画面の指示に従ってUSBメモリを抜いて再起動すれば無事終了です。こうやって書くとまだまだ大変ですね💦 皆さんもあきらめずにがんばってください👍

Ubuntu 22.04 LTSが自宅PCクラスタの救世主な理由【2022年3月版】

自宅PCクラスタを組むなら『弁当箱PC』で決まり❕

個人データ基盤を敢えてオンプレで構築する理由』でご説明した通り、「ビッグデータを贅沢に使いたい」ならクラウドとは別にオンプレのPCクラスタが必要です。そして狭い日本の家でPCクラスタなどという仰々しいシステムを組むには超小型PCが必要です。私はサイズが分かりやすいので『弁当箱PC』と呼んでいます🤗

弁当箱PC(超小型PC)の特徴は、

  • モニタ無しで容量1リットル前後の弁当箱サイズ
  • 消費電力40W以下(CPUのTDPは35W)
  • グラフィックはGPU内蔵型(APU)

といったものです。小ささにこだわるのは、限られた面積で少しでも多くのCPUコアを動かすためです。消費電力にこだわるのは、1500Wの家庭用コンセントで安定稼働させるべく余計な機能による電力消費を抑えるためです。特に高性能GPU(グラフィック)はディープラーニング以外の用途では不要です。

弁当箱PCは本来受付やコールセンターの端末用のため、CPUやメモリの性能が全体的に抑えめです。しかしPCクラスタ用途では弁当箱サイズの範囲内で可能な限り贅沢にする必要があります。処理速度だけなら遅いPCを何台も並べるより我らがヒーロー藤井SOTAのThreadripperのように超高性能PC1台の方が強いです。PCクラスタは貧乏人の激安PC活用術分散処理データ保全の両取りを狙って敢えて複数台にしますが、個々のPCが速ければ速いに越したことはないです。具体的には、

  • CPUは最低6コア、予算が許せば8コア16スレッド
  • メモリは最低32GB、予算が許せば64GB
  • 512GB以上のSSD、予算が許せば1TB
  • USB Type-C 3.2 Gen2 10Gbpsポート推奨
  • 台数は5台以上を想定

となります。1台10万円以下に抑えたいところですが、インフレが進んだ今では10万円を超えてしまうかも知れません。予算に余裕がないならリース落ちの中古PCを拾っていくのもひとつの選択肢です。USB 3.2 Gen2推奨なのは将来的に10Gbps EthernetのハブとLANアダプターが安くなった際に10GbEで運用出来るからです。ストレージが控えめなのはクラスタの強みである「壊れたら復旧など考えずさっさと入れ替え」を想定しているからです。

2022年時点のお勧めCPUはAMD Ryzen APU

PCクラスタのCPUはIntelかAMDの2択となりますが、現時点で私はAMD Ryzen APU推しです。IntelがCPU自社製造に縛られて未だに14nmや10nmのプロセスを使っているのに対して、AMDはTSMCの最新7nmプロセスを使っており近い将来5nmも出てくるからです。CPUが微細化するほど消費電力あたりの処理性能(通称『ワッパ』)が上がるので貧乏人に優しい自宅クラスタで有利だからです。

実際に2022年3月20日時点でHPの弁当箱PCでIntelとAMDの同価格帯商品の性能を比べてみると、

  • Intel …… Core™ i5-10500T
  • AMD …… AMD Ryzen™ 5 Pro 5650GE

消費電力はどちらもTDP35Wで6コア12スレッド。CPUの総合性能(マルチスレッド)ベンチマークであるPassMark resultはAMDの19266に対してIntelは10760でAMDの方が2倍近く速いことが分かります。この差は基本的に微細化の差であり、将来的には微細化でどちらが勝つかで勝負が決まると思われます。なおbig.LITTLEという「比較的大型で高いパフォーマンスを持つCPUコア(big)と、小型で低消費電力のCPUコア(LITTLE)を組み合わせる」技術を用いた製品も出てきていますが、サーバー用途では基本的に全てのCPUコアを用いるので無意味です。

Ubuntu Linuxは無料で管理が楽なOSだが、AMD対応は遅れている

Ubuntu LinuxはWindowsと比べて巨大なアップデートで苦しむことが少なく、必要な機能を選んで入れられるのでスキルがある方には便利なOSです。サーバーが10台にもなるとアップデートの通信量も10倍になるので、貧弱な回線しか引けない貧乏人にとっては比較的アップデートが小さいUbuntuが有力な選択肢になります。

また弁当箱PCを新品で買うとリモートデスクトップのホストになれないWindows Homeが入っていることが多く、高いProを買うくらいならUbuntuに替えた方が楽で安上がりという事情もあります。

ところが、LinuxはかつてAMD対応が遅れており、私も「Ubuntu 20.04 LTSがRyzen5 4600Hノートで画面表示出来ない」など苦労がありました。しかし、Linuxの親玉リーナス・トーバルズがAMDを寄付してもらった買ったことでAMD対応が進み、UbuntuでもAMD Ryzen APUで画面表示出来るようになってきました

Ubuntu Linux 22.04 LTSは初の最新Ryzen APU対応LTSバージョン

Ubuntuは長期サポート版(LTS = Long Time Support)と無印版があり、LTSは2年ごとのリリースとなっています。サーバーとして真面目に使うならLTSが前提となるため、2022年4月21日にリリース予定のUbuntu Linux 22.04 LTSが初の最新Ryzen APU対応LTSバージョンとなります。

Ubuntu 22.04 LTSは2032年3月までのサポートなのでサーバー運用でも安心

Ryzen APUへの対応はUbuntuではなくLinuxカーネルで行われているので、

  • Linuxカーネルのどのバージョンから該当するRyzen APUに対応しているか
  • Ubuntu LTSがどのバージョンのLinuxカーネルを採用するか

の2点でお手持ちのRyzen APUでUbuntuが(素のバニラ状態で)動くかが決まります。具体的には、Linuxカーネルバージョンは

となります。なおTDP35Wモデルのうち5000番台は5300GE(4コア)、5600GE(6コア)と5700GE(8コア)、4000番台は4300GE(4コア)、4350GE(4コア)、4600GE(6コア)、4650GE(6コア)、4700GE(8コア)、4750GE(8コア)などとなります。

Ubuntuが採用するLinuxカーネルは下記となります:

  • Ubuntu 20.04 LTS …… 5.4
  • Ubuntu 20.10 …… 5.8
  • Ubuntu 21.04 …… 5.11
  • Ubuntu 21.10 …… 5.13
  • Ubuntu 22.04 LTS …… 5.15

長くなりましたが、要は「新品のRyzen弁当箱PCを買って2022年4月21日まで待ってUbuntu 22.04 LTSを入れれば動く(はず)」ということです。

なお、私は現在無職で貧乏なのでPCクラスタを全部入れ替えることなど出来ませんが、1台だけ4750GEを入手済です🤗

個人データ基盤を敢えてオンプレで構築する理由

時代はクラウド。しかしお財布が……

AWSやAzure、GCP、OCIなど大手ITはクラウドサービスを揃え、熱心に推進しています。個人でもクラウドを学習しやすいように、無料枠クーポンを拡充するベンダーも増えてきました。

クラウドはPCやLANなどの初期投資が不要でコスト的にも敷居は低く、高性能PCを上回る処理能力の仮想マシン(VM)インスタンスも提供されています。

しかし、常時稼働するとランニングコストが1台あたり月1万円を超えてきます。私は90年代からレンタルサーバーで当サイトを運営してきましたが、普通のサラリーマンとして自腹でサーバー費用を負担するのは月 1万円あたりが限界でした。

クラウドがコスト的に有利なのは「必要なものを必要なときだけ」調達するからです。具体的には当Webサイトのように最小限のリソースだけ常時稼働する場合、あるいは機械学習などのために高性能GPUなど贅沢なリソースを一定時間だけ用いる場合などに限られます。技術力が高い方なら、データ処理タスクにしか課金されないサーバーレスアーキテクチャでシステム全体を構築することも選択肢となり得ます。

いずれにせよ、「使い放題はクラウドでは実現出来ない(現実的な費用では)」ということです。例外として、常時稼働こそ出来ませんが月1,000円でGPUインスタンスが使い放題Colab Proあたりがデータ基盤として個人が契約出来るクラウドの限界、との認識です。

Excelで出来るデータ分析にデータ基盤は要らない

ここでいったん原点に戻り、「個人が何のためにデータ基盤を構築するのか?」というテーマを考察します。

学校の課題や仕事で、初めてデータ分析に取り組んだときのことを思い出してみましょう。ほとんどの人はExcelだったと思います。機械学習界隈では「なぜかいきなりPython」というストーリーが多いです。しかし、PythonやRはExcelより圧倒的に敷居が高いですから、本来は「Excelでは無理だから」PythonやRに取り組むのが筋、というものでしょう。具体的には

  • Excelにない機能を使いたいのでPythonやRなどの言語を使う
  • Excelでは処理出来ないほど巨大なデータを操作したいのでSQLデータベースを使う
  • ギガバイト、テラバイト単位のデータベースを管理したいのでデータ基盤を構築する

といった動機であるはずです。これってかなり高度で贅沢ですよね。まずExcelやGoogleスプレッドシートを試してみて、データ分析の目的が本当にExcelやGoogleスプレッドシートで足りないのか確認することをお勧めします。特にGoogleスプレッドシートはPC版のExcelではやりにくいウェブからのデータ取得も無料で出来ますので、集めたいデータがビッグデータでなければ最初に検討するべき選択肢だと思います。

個人データ基盤を作るのは「ビッグデータを贅沢に使いたいから」

ここまで来ると、個人でデータ基盤を作るのは「ビッグデータを贅沢に使いたいから」だということが見えてきます。本来なら企業や大学でしか扱えないような巨大なデータを敢えて個人で蓄積・活用したいのが動機ですから、石油王でもなければクラウドでは無理ということになります。

オンプレと言っても、PC1台で出来るタスクなら『データ基盤』などという仰々しいものを個人で作る必要はありません。バックアップの観点でもGoogleドライブでは100GBが年額2,500円ですから、将来的に1TBを超えるようなデータを管理したいような人が『データ基盤』を検討する価値がある人、ということになります。

個人データ基盤で想定するアーキテクチャ=『PCクラスタ』

個人でテラバイト単位のデータを大量に蓄積して利活用するには、さすがにクラウドやPC1台では無理があります。そこで複数台のPCを連携する『PCクラスタ』を考えてみます。

個人用PCは最近ではノートPCが主流ですし、タワー型のような大型PCを複数台自宅に置くのは現実的ではありません。しかしコールセンターや受付用に販売されている超小型PCなら、5台くらい自宅に置いても場所はさほど取りません。私の自宅では、実際に超小型PCが10台ほど稼働しています

超小型PCで組むPCクラスタ

1台あたりの消費電力は30W前後で、電気料金は1台あたり月額数百円程度です。電気料金だけで見れば「オンプレデータ基盤のランニングコストはクラウドの100分の1」ということになります。

データ基盤としてのPCクラスタ利用を想定する場合、LANの速度が深刻なボトルネックとなります。現状ではコストとの兼ね合いから2.5GbEで構築するのが現実的です。少しお値段が張りますが2.5GbE対応のハブとUSB接続のLANアダプターを用意することをお勧めします。

OSは、アップデート時の通信量の少なさやサーバー管理の容易さなどからUbuntu Linuxを使用しています。現在はUbuntu 20.04 LTSを使用していますが、2022年4月末にリリース予定のUbuntu 22.04 LTSに入れ替える予定です。Ubuntu 22.04 LTSは、最近のAMD Ryzen APUでも素のバニラ状態で動く初のLTSリリースとなるため大いに期待しています。なお、後にご紹介する『分散データベース』は大半がJava VM上で動作するため、中古PCバンドルで安価に入手出来るWindows Professionalなど一般の方が使い慣れたOSでも構築運用自体は可能と思われます。

念のため補足しておきますが、超小型PCをクラスタ運用する際には、モニターやキーボードは邪魔なので外しています。必要に応じてHDMI/DisplayPortで接続出来るモバイルモニター、キーボードとタッチパッドが一体化した入力装置を接続してメンテナンスを行います。部屋が暑くなる方は先の写真のように超小型PCと同サイズのUSBファンを重ねて設置しておくと夏場も少し安心です。

SQL or NoSQL?

PCクラスタ向けのデータ管理には専用のソフトウェアが必要です。スタンドアロンのデータベースは定期的なバックアップでデータを保全しますが、PCクラスタ向けの分散データベースはデータ本体を分割して複数の『レプリカ』としてサーバーに分散格納する『シャーディング』という仕組みで動きます。

これまで分散データベースにはNoSQLの『Elasticsearch』を使ってきました。しかしElasticsearchはKibanaなど同社のBIツールと連携して用いることを前提としており、無償の範囲では汎用的なJDBCコネクタを利用出来ないことなどから、次期のデータ基盤は分散RDBに替えようと思っています。

NoSQLはJSON&KeyValueでのデータ格納を前提としています。ログデータの蓄積に向いており柔軟なデータ構造に対応出来るという意味では優れています。しかし、データ分析の際はほぼほぼ表形式に加工して用いることやデータ格納時にデータ型をチェックしておかないと分析時に前処理で困ることが多いことなどから、私にとってはSQL対応の分散RDBでデータを管理するのが一番、という結論に至りました。

クラウドでは『ボタンひとつ』で使える分散RDB。しかしオンプレでは……

分散RDBは分散データベースの一種で、複数のサーバーにデータを複製して保存するシャーディングという技術を用います。サーバーの数を増やしてレプリカを再構築すれば自動的に新しいサーバーにデータが複製されますし、サーバーのうち1台が壊れても他のサーバーにレプリカが保存されているのでデータを失わずに済みます。

個人でもNASなどでRAIDを運用している方も多いと思いますが、NASそのものが壊れてしまうとデータはHDDからサルベージしなければならず、無事サルベージ出来るかも運次第、というのが現実です。ハードウェア障害時にもデータを実運用出来る形で保持するためには、PCクラスタでデータをレプリケーションして分散運用するのがオンプレで唯一の有効な手段と考えています。

このような技術は、大手クラウドでは既に当たり前のものとなっています。GoogleのCloud Spannerやデータ分析に特化したBigQuery、AWSのAmazon Redshiftなどはユーザーが意識しない形で巨大な分散データベースを構築しており、これによりペタバイト級のデータを扱えるとされています。データのレプリケーションもユーザーに意識させることなく複数のデータセンターに分散して格納されているため、データの堅牢性という意味ではクラウドが最強であることに疑いはありません。ただし、当然ながら堅牢な分だけお高いので、データ保全命でクラウドにビッグデータを置くかどうかは「お財布と相談」になります。

しかし、オンプレ用の分散RDBには従来、めぼしいものがありませんでした。オープンソースの製品もいくつか存在してはいるのですが、SQLの対応が弱かったりJDBCドライバで文字化けが出るなど汎用的なデータ基盤としては厳しいものがありました。開発元もアメリカではなく会社としての事業継続性も未知数、という印象。

分散RDBの決定打となるか?PostgreSQL拡張『Citus』

ところが最近になって、マイクロソフトからAzure Database for PostgreSQL – Hyperscale (Citus) というクラウドサービスが出てきました。これ自体は他社クラウドの分散RDBと大差無いのですが、

  • 定番のOSS RDBであるPostgreSQLを拡張する形で分散RDBを実現している
  • PostgreSQLの拡張であるため、BIなど各種ツールが用意しているPostgreSQL用のJDBC/ODBCドライバがそのまま利用できる(かも知れない)
  • 【これが重要】CitusはOSSであり、オンプレで利用できる
  • 開発元のCitus Dataは2019年にマイクロソフトが買収しており、経営が安定している

など利点が多く「まさに決定的」という印象です。

Citusはマイクロソフト傘下でありながらOSSであり、オンプレで使える

マイクロソフトの藤田氏によれば「Citus Dataの創立者から聞いた話ですが、買収提案を受け入れた理由は、MicrosoftがOSSコミュニティーに最も貢献しているパブリッククラウドプロバイダーだったからとのことです」とのこと。ベンダーがここまで明言している以上は、CitusがOSSサポートを中止することは当分ないはず、です。

Citusを使うのはAzureが一番楽だと思いますが、Citusがオンプレで提供されている限り、その気になればAWSやGCPのVM上でもCitusによる分散RDBを構築運用できるはず、です。これはクラウドベンダーにロックインされた挙句、突然の大幅値上げで泣く羽目になっても逃げる余地があることを意味します。これがどれだけ重要なことかは、IT業界に長い方ならよくご存知でしょう。

うちでは「全部これから」です💦

我が家の自宅クラスタは、2022年4月末のUbuntu 22.04 LTSのリリースを待って全てのサーバーOSを入れ替える予定です。これに合わせて分散データベースもCitusに入れ替えたいと考えており、「全部これから」です。近い将来PostgreSQL自体も分散RDB機能を持つようになるかも知れませんが、それを待っていられるほど私の寿命は長くなさそうです。

データ活用の観点からも、従来kibanaやPythonなどに限られていた分析ツールがJDBC/ODBC対応の各種BIツールに拡がることが期待されます。無償で多機能なPower BI Desktopなどが使えるはずですし、PostgreSQL自体が持っているマテリアライズドビューなどの機能を用いてRDB側でクエリを高速化することも(スキル次第では)出来るでしょう。

これからマイペースで記事も投稿していこうと考えていますので、引き続きよろしくお願いします。

Ubuntu 21.04ノート 環境構築(2日目)

細かい環境構築

 初日でUbuntu Linux 21.04の基本的なインストールが終わりました。プレリリース版であるDaily Buildでの導入でしたが、既にリリース月ということもあり大きな障害はありませんでした。

 2日目以降は細かい環境構築と機械学習周りの整備となります。

VLC動画再生
Spotify音楽配信
ubuntu-restricted-extras音楽や動画のコーデック
LibreOffice ppaLibreOfficeの自動アップデート
ubuntu-defaults-ja日本語環境 ※未対応の模様
chrome-gnome-shell、GNOME Shell integration、拡張機能GUIをカスタマイズするツール群
sambaLAN上のWindows PCなどとファイルを共有する
xrdpまだ
SynapticAPT に基づくグラフィカルなパッケージ管理ツール
GSmartControlS.M.A.R.T対応のSSDなどの状態を調べるツール。このPCの内蔵SSDは非対応な模様

 どれもインストールが特に難しいということはありませんでしたので、詳細説明は割愛します。

Ubuntu 21.04使用開始(1日目)

Ryzen+NVIDIAのノートが欲しい。データベースと機械学習の全部入りラーメンだ

 前々から、図書館などでもガッツリ使い倒せるLinuxノートが欲しいと思っていました。具体的には、PostgreSQLがselect文で4スレッドくらい並列処理してくれて、TensorFlow/KerasでGPU SUGEEEE出来る程度のスペックです。

 Amazonの年末セールで『ASUS ゲーミングノートパソコン TUF Gaming A15 FA506IH (AMD Ryzen5 4600H/8GB・SSD 512GB/GTX 1650/1,920×1,080ドット (フルHD) (144Hz)/15.6インチ/フォートレス・グレイ)』が¥82,800と安かったので衝動買い。メモリは即32GBに増設しました。

「AMDが7nmで作ったワットパフォーマンスが良いRenoirが載ったノートにディープラーニングで使えるGTX 1650が付いて8万ちょい。買うしかない……」

 4600Hは6コア12スレッドのノートPC向けCPUで、AMD Renoirシリーズの廉価版です。『最強』ではありませんが、実売10万円以下のノートでこの性能は魅力的です。SSDは内蔵で別途2TBくらい欲しいですが、金欠なので追い詰まってから考えることにします。

AMD Ryzen 5 4600Hは7nm世代の廉価版モバイルCPU

 なお現在の最新モデルは「Ryzen PRO 5000シリーズ モバイル プロセッサ(5850U/5650U/5450U)」、及び「Ryzen 5000シリーズ モバイル プロセッサ(5800U/5700U/5600U/5500U/5400U/5300U)」で7nm世代のままです。5nmのZen4世代は2022年に登場予定です。

ゲーミングPCへのUbuntu 21.04のインストール

 Ubuntuのインストールが終わると、沢山の有名で楽しそうなアプリをリコメンドされます。「SSDの残りが300GBくらいしかないのに片っ端から入れちゃダメダ」と思いつつも入れられるうちはつい入れてしまいます。

日本語フォルダ名を英語化

 lsなどでパス指定するときにフォルダ名が日本語だとIMEの切り替えや入力が面倒なので、英語に変えてしまいます。

masaru@ASUS-TUF-Gaming:~$ LANG=C xdg-user-dirs-gtk-update

導入直後に入れたアプリ

 初心者でも導入に困らなさそうなものは名前だけ……。

NVIDIA driver metapackageNVIDIA独自のグラフィックドライバ。『ソフトウェアとアップデート』 – 『追加のドライバー』でプロプライエタリ版を指定してインストールする必要がある
Ubuntu Live Patchパッケージの自動更新サービス。実際は手動でapt updateを続けることが多いですが、念のため導入
Shutter画面キャプチャソフト。不具合のため現在使用できず
Krita定番の画像ソフト。Shutterが使えなかったので最優先で導入。個人的にも好きなソフト
Google Chrome, ChromiumWebブラウザ。SSOの誘惑と逃げたい気持ちでサンドイッチに
dbeaver-ceJDBCの汎用データベースクライアント
Anaconda言わずと知れたPython機械学習系のフレームワーク。PATHを汚染するので好きではないのですが、楽なので結局入れてしまいます
jupyter-notebookAnacondaに同梱のPython実行環境
Visual Studio Codeプログラム開発環境のデファクトスタンダード。Pythonなどのインタプリタを配下に置いてしまうAnacondaとの共存が課題
RAnacondaのパッケージとしてcondaでインストール
RStudioRの開発環境。PATHの問題を避けるためAnacondaからインストール
tracerouteサーバーまでのネットワーク経路を確認するツール
OpenJDK 11各種データベース用のJava開発環境

NDIVIAドライバの基本設定

 Ubuntu 21.04は、素の状態でNVIDIAの独自ドライバを使ってくれません。チューニングの観点から独自ドライバを入れるのが良さそうです。

masaru@ASUS-TUF-Gaming:~$ lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation TU117M (rev ff)
01:00.1 Audio device: NVIDIA Corporation Device 10fa (rev ff)

 続いて、aptのレポジトリに最新のドライバが降ってくるように設定します。

masaru@ASUS-TUF-Gaming:~$ sudo add-apt-repository -y -n ppa:graphics-drivers/ppaPPA publishes dbgsym, you may need to include 'main/debug' component
Repository: 'deb http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu/ hirsute main'
Description:
Fresh drivers from upstream, currently shipping Nvidia.

## Current Status

Current long-lived branch release: `nvidia-430` (430.40)
Dropped support for Fermi series (https://nvidia.custhelp.com/app/answers/detail/a_id/4656)

Old long-lived branch release: `nvidia-390` (390.129)

For GF1xx GPUs use `nvidia-390` (390.129)
For G8x, G9x and GT2xx GPUs use `nvidia-340` (340.107)
For NV4x and G7x GPUs use `nvidia-304` (304.137) End-Of-Life!

Support timeframes for Unix legacy GPU releases:
https://nvidia.custhelp.com/app/answers/detail/a_id/3142

## What we're working on right now:

- Normal driver updates
- Help Wanted: Mesa Updates for Intel/AMD users, ping us if you want to help do this work, we're shorthanded.

## WARNINGS:

This PPA is currently in testing, you should be experienced with packaging before you dive in here:

Volunteers welcome!

### How you can help:

## Install PTS and benchmark your gear:

    sudo apt-get install phoronix-test-suite

Run the benchmark:

    phoronix-test-suite default-benchmark openarena xonotic tesseract gputest unigine-valley

and then say yes when it asks you to submit your results to openbechmarking.org. Then grab a cup of coffee, it takes a bit for the benchmarks to run. Depending on the version of Ubuntu you're using it might preferable for you to grabs PTS from upstream directly: http://www.phoronix-test-suite.com/?k=downloads

## Share your results with the community:

Post a link to your results (or any other feedback to): https://launchpad.net/~graphics-drivers-testers

Remember to rerun and resubmit the benchmarks after driver upgrades, this will allow us to gather a bunch of data on performance that we can share with everybody.

If you run into old documentation referring to other PPAs, you can help us by consolidating references to this PPA.

If someone wants to go ahead and start prototyping on `software-properties-gtk` on what the GUI should look like, please start hacking!

## Help us Help You!

We use the donation funds to get the developers hardware to test and upload these drivers, please consider donating to the "community" slider on the donation page if you're loving this PPA:

http://www.ubuntu.com/download/desktop/contribute
More info: https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
Adding repository.
Adding deb entry to /etc/apt/sources.list.d/graphics-drivers-ubuntu-ppa-hirsute.list
Adding disabled deb-src entry to /etc/apt/sources.list.d/graphics-drivers-ubuntu-ppa-hirsute.list
Adding key to /etc/apt/trusted.gpg.d/graphics-drivers-ubuntu-ppa.gpg with fingerprint 2388FF3BE10A76F638F80723FCAE110B1118213C

Linux版のAnacondaはシェルから導入

 Anacondaはパスなど各種設定をOSから乗っ取る『お行儀が悪いフレームワーク』なためか、Ubuntuでもストアアプリには入っていません。シェルスクリプトを落としてbashで実行します。

masaru@ASUS-TUF-Gaming:~/Downloads$ bash ./Anaconda3-2020.11-Linux-x86_64.sh 

Welcome to Anaconda3 2020.11

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
...
masaru@ASUS-TUF-Gaming:~/anaconda3/bin$ ./conda init
no change     /home/masaru/anaconda3/condabin/conda
no change     /home/masaru/anaconda3/bin/conda
no change     /home/masaru/anaconda3/bin/conda-env
no change     /home/masaru/anaconda3/bin/activate
no change     /home/masaru/anaconda3/bin/deactivate
no change     /home/masaru/anaconda3/etc/profile.d/conda.sh
no change     /home/masaru/anaconda3/etc/fish/conf.d/conda.fish
no change     /home/masaru/anaconda3/shell/condabin/Conda.psm1
no change     /home/masaru/anaconda3/shell/condabin/conda-hook.ps1
no change     /home/masaru/anaconda3/lib/python3.8/site-packages/xontrib/conda.xsh
no change     /home/masaru/anaconda3/etc/profile.d/conda.csh
modified      /home/masaru/.bashrc
(base) masaru@ASUS-TUF-Gaming:~$ conda update --all
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/masaru/anaconda3


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    _anaconda_depends-2020.07  |           py38_0           6 KB
...

Anacondaの功罪

 今回インストールしたAnacondaは2020年7月版。主な開発ツールのPATHを乗っ取る仕様であることを考えると半年以上放置されているのは少し疑念を感じます。もちろんconda updateはかけるのですが……。

 最新版をいち早く使いたい方はAnaconda無しのアカウントを作るか、仮想環境で運用することになりそうです。

(base) masaru@ASUS-TUF-Gaming:~$ python --version
Python 3.8.8

Surface Bookなど古いモバイルPCをモバイルバッテリーでUSB PD給電する

DSC_0828

コロナ前にリアル勉強会参加用に買ったモバイルPC(Surface Book初代、リース落ち中古)が1年ほどホコリをかぶっていました。

 今回、WindowsでのPython/Excel、ウェブ制作用にこのSurface Bookを復活させてみました。

 Surface系の端末は細長い独自端子のACアダプターで充電します。最近のモバイルPCはANKERなどのモバイルバッテリーで充電出来るのが普通になってきていますが、この機種は独自規格なので出来ていませんでした。

 ある日Amazonで「Surfaceの充電端子−USB Type-C」という怪しい変換ケーブルを見つけました。もしや?と思って充電したら出来たのが写真の図です。

これでMac Book Proと同じバッテリーでSurface Bookも充電可能になり図書館での作業が捗りそうです。

ANKERのUSB PD給電対応バッテリーでSurface Bookを充電する