WordPressという『技術的負債』から脱出できる日は来るのか

WordPressを好きで使っている技術者は誰もいない

ノーコードでブログを開設出来るためアフィリエイトブログの代名詞となったWordPress。20年前の掲示板サイトと同じ『PHP』というミドルウェアが基盤として使われており、表示がとにかく遅い化石のようなサイトになるのが特徴です。

WordPressが遅いのは、PHPが「呼ばれるたびにWebページをまるごと生成して表示する」旧世代の技術なのが理由です。Googleなど現代的なサイト、特にWebアプリと呼ばれるようなサービスではサイト表示にJavaScriptというスクリプト言語がふんだんに使われており、一度ページを読み込んだあとはユーザーの操作などに応じて動的に必要な部分だけを読み込んで更新します。

更新時に読み込むデータが少ないほど訪問者にもサーバーにも負担が少ないので、技術者なら誰でもJavaScriptベースのサイトを作りたいと思っています。しかし、実際にはそう簡単にはいきません。

『SEO』というバッドノウハウのせいでWordPressは延命した

Googleなどの検索エンジンは、世界中のWebサイトを定期的に巡回してデータベースを更新し、検索結果に表示します。この巡回ソフトを『クローラー』と呼びますが、かつてはクローラーの性能が低く、ChromeなどのWebブラウザの表示ほど正確にサイトデータを収集できませんでした。具体的には、JavaScriptを多用したサイトの巡回が苦手だったのです。

そのため、表示が高速なJavaScriptベースのサイトより、ページをHTMLとしてベタッと表示するPHPのサイトの方がGoogleに収集されやすく、検索結果の上位に表示されやすいという不条理な状況が生まれました。「WordPressはSEOに強い」と言われてきた理由です。

つまり、WordPressを用いたサイトは「人間にとっての使い勝手よりGoogleのクローラーの使い勝手を優先する」という本末転倒なことをしているということになります。

Googleもそうした状況を良いとは思っていなかったので、Chromeと同等の機能をクローラーに持たせるようになりました。このアプリはHeadless Chromeとして一般にも公開されています。

生成AIで無意味化するSEO

昨年にChatGPTを筆頭に生成AIショックが起こり、一般人がWebサイトを検索してアフィリエイトブログやまとめサイトに悩まされることなく問題を解決出来るようになりました。もちろん生成AIもGoogleと同様に世界中のWebサイトを巡回して学習しているのですが、生成AIは不快な広告を見せたり下らない宣伝文を訪問者に読ませることなく、短文でズバリと解決策を提示してくれます。

ネットユーザーは買い物をしたい時だけは検索を続けると思いますが、そうでない時は生成AIに聞いて済ませた方が「タイパが良い」のですから、この先のアフィリエイトブログの運命は推して知るべしです。

検索エンジンが無意味化したことでSEOも無意味化し、結果的にWordPressという化石アプリもWebマーケティングの観点からは無意味化しました。SEO業者は「生成AIO」といった売り文句で生き残りを図ると思いますが、生成AIはよっぽどのことが無ければ外部サイトを見ないで済むような回答をするはずですから、効果は限定的と言えます。

卒業したいのに卒業できないWordPress

もはや「WordPressを卒業しない理由」はなくなりました。そこでJavaScriptをふんだんに活用したブログエンジンを探すことになりますが、なぜかWordPressを代替する決定的なソフトは未だに存在しません。

WordPressにはサードパーティーによる豊富なプラグインがあり、ビジネスのエコシステムとして回っているので簡単には他製品がひっくり返すことが出来ない状況にあります。

私が最近注目しているのはStrapi – Open source Node.js Headless CMSで、ノーコードでブログを開設できます。日本語に未対応なのでまだ自分で導入するのは時期尚早と判断していますが、高速なサイト表示を実現するための技術的な要件は満たしているようです。

実際にStrapiでブログを運用するにはAWSやGitHub Pagesなどのクラウド基盤で簡単に動かせる必要があります。既に国内でも「社内向けAPIポータルサイトのCMSをAWS App Runnerで作った」のようにAWSでStrapiを運用するケースが出てきているようです。

今はまだフロントエンドに強い技術者でないとStrapiを使いこなすのは難しいですが、AWSなどの大手クラウドがLightSailのような一般人向けのサービスでStrapiを簡単に開設出来るようになれば、私のように「WordPressを未だに使っているのは恥ずかしい」と思っている技術屋から順番に脱WordPressが始まると予想しています。

Ubuntu Linux 24.04 LTSが出て1ヶ月が経ったので

Ubuntu Linux 22.04 LTS

長らくブログを更新していなかった件

引っ越しが終わり落ち着いたのも束の間、世の中は激変の時代に突入しました。インフレと円安による物価高で生活が苦しくなり、電気代の高騰でサーバー遊びも難しくなりました。生成AIの台頭アフィブログなんか読むよりAIに聞いた方がマシな時代になり、ブログ更新の意義が問われるようになりました。

そしてオープンデータ界隈もコロナ渦中の気前の良さはどこへやら、AIによる学習への恐れか有意義なデータがどんどんネットから消えていき、データベース構築へのモチベーションも失われていきました。サーバーを並べて分散データベースを構築しても入れるデータがないという状況になってしまいました。

生成AIブームでIT分野の関心事ももっぱらGPUの活用が中心となりました。ローカルではせいぜいVRAM16GB前後しか積めないためクラウドでやらないとAIが賢くない状況となり、IT大手がGPU性能の殴り合いでAIの開発競争を続けるなか個人の居場所は失われていきました。

このような流れの中で、組織から離れた自分に何が出来るか分からない状況が今日まで続いています。

淡々とアップデートを続けるUbuntu、4月末ギリギリで24.04 LTSをリリース

Canonicalはセキュリティ関連の修正で半月リリースが遅れたものの、4月中に無事Ubuntu Linux 24.04 LTSを公開しました。Linuxがインストールゲームだった時代はとうの昔に終わり、枯れたPCでは22.04時代のノウハウそのままでトラブルもなく24.04を導入できています。うーん、書くことがない。

一方、面白みはないもののUbuntuを取り巻く環境は良くなっています。Windows 11に非対応とされサポート打ち切りが近づくIntel Core i 7xxx(第七世代)以前の中古ノートPCはフルHDモデルですら1万円台でゴミのように叩き売られ、Core i8xxx(第八世代)以降のPCも軒並み値崩れしました。自慢みたいになるので詳しくは書きませんが、私はWindows11が動くフルHD/NVMe SSDのノートPCを2万円台で入手したり、最新に近いCore i7-11700搭載のミニタワーを5万円台で入手したりしています。

新しめの中古PCが値崩れしている裏の理由に、「ぶっちゃけスマホの方が速くて便利」というものもありそうです。私が最近買ったでかいタワー型PCですら、せいぜい手元のスマホの2〜3倍の処理能力しかないのです。中高年のパソコンおじさんが新しいPCを手にした謎の高揚感、万能感も木っ端微塵です。おそらくiPhoneをお持ちの方なら、お手元のPCのCPU処理能力はiPhoneより遅いか大差ないはずです。ぜひ一度比べてみてください。

OSの話に戻りましょう。より使いにくく押し付けがましくなったWindows11を使いたくない一心でWindows10を使い続ける人にアップデートバグが襲ってきました。KB5034441の0x80070643エラーKB5034441が0x80070643エラーでインストールできない問題などを見ると、皆さん苦労されていることが伝わってきます。私も未だにアップデートが止まりっぱなしのWindows機があり、こんなに苦労するならもうUbuntu Linuxでいいじゃんとの思いを新たにしています。

KB5034441の0x80070643エラーやKB5034441が0x80070643エラーでインストールできない問題

物価高で飯を食うのもやっとの中で高いお金を払ってWindows PCを買い換えるくらいなら、どんどんUbuntuに入れ替えて余ったお金で食べ物を買いましょう。それが出来るだけの知識があるのは幸せなことです。

でもAlmaLinuxも入れてみた

Linux初心者の方が私のブログにたどり着くことは少ないと思いますが、Linuxサーバー管理を仕事にしたい方にUbuntuが向いているかというと、微妙な点があります。日本では業務用のLinuxサーバーOSとして長らくRedHat Enterprise Linux(RHEL)が使われており、Linux関連の資格もRHELが前提になっています。AWSなどのクラウドではUbuntuサーバーも選べますが、クラウドベンダーの自社OSはRHELクローン(RHELと互換性があるOS)であることが多いです。

個人的にはUbuntuのとっつきやすさが気に入っているのですが、パッケージ管理などのコマンド体系がRHELとはだいぶ異なっているので、資格の勉強をしたい方はRHELクローンのAlmaLinuxを学習用に利用した方が良いでしょう。私も某団体の勉強会で推奨されていたことをきっかけに、AlmaLinuxのノートPCを1台確保しました。

なお、Google周辺などAI界隈では業務用でもUbuntuがけっこう使われているので、サーバー管理者を目指しているわけではない方はUbuntuメインでも全く問題がないと思います。

今後のプラン「Ubuntu Linux 22.04 LTS構築手順書」

夢の無い時代ではありますが、中高年が何もやっていないと認知症が進行しますのでプランだけでも考えてみました。

これまではサーバーの台数が少なかったので、特に手順書もなしに過去の経験をもとに適当にサーバー構築していました。しかしサーバーの台数が増えてきたこと、クライアント用でもUbuntuを本格的に使うようになったことをきっかけに、自分用のUbuntuサーバー/構築手順書を作り始めています。

自宅で(あまりセキュリティとかを気にせずに)使い勝手が良い環境を構築する観点から、下記のような項目をブログに上げたいと思っています。

  • BIOS(UEFI)の更新とUbuntuのインストール
  • ハードウェア情報の取得、管理
  • Ubuntuの基本的な設定とアプリのインストール
  • Windows機との連携(samba、xrdp)
  • サーバー監視(温度、システム負荷など)
  • 出先からのサーバー接続VPN(tailscale)
  • RDBデータベースの構築(PostgreSQL、Citus)

生成AI関連の学習も進めたいのですが、敢えてローカルで挑戦する価値のあるものが現状ではStable Diffusionくらいしかないので、少しずつ進めようと思います。先に書いたタワー型PCはGPU利用のために(邪魔だけど仕方なく)購入したもので、GeForce RTX 4060 Ti 16GBのGPUも入手済ではあります。

EliteDesk 800 G8 TWR/CT
GV-N406TWF2OC-16GD

また、Claude3やChatGPTなど生成AIの助けを借りてPythonの簡単なコードを書いてGoogle Colabで実行する、といった少し先進的な(?)試みにも挑戦したいと思います。作成するコード自体は生成AI関連ではなく、ブログには敢えて書かないようにしている株式投資に関連した情報収集がテーマになると思います。

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の糞重い定期アップデートに耐えられるのも大きい。なるべく減らしたいけど。

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

サイト落ちから復活&リアル引越完了のお知らせ

引越作業でバタバタしてる間にWordPress丸ごと落ちていた

2022年の11月から3か月以上かかった練馬から田無への引越し。サーバー20台を始めとする家財の異常な多さに気が遠くなりそうでした。レンタル倉庫を借り、サーバー群を梱包して自転車で数台ずつ運ぶことから始まり手荷物での無限往復が数十回。2023年2月下旬現在、ようやく引越しが9割がた完了しました。

落ち着いたので放置していたcan.ne.jpを開いたところ、WordPressが落ちていて恐ろしいエラーメッセージが😱

このサイトで重大なエラーが発生しました。

泣く泣くワードプレスで「このサイトで重大なエラーが発生しました。」と表示された場合の対処方法を参考にエラーログを有効にした結果、Simply Staticプラグインがぶっ壊れていることが判明。WordPressプラグインをFTPで強制無効化・停止する方法でSimply Staticを外すことでいったん解決しました。

まだ、目次のプラグインがぶっ壊れてますね……まぁとりあえず良いか。個人サイトだし。

サイトは復活したがサーバー群は復活しない

引っ越しの段ボールに埋もれて暮らす日々

理由は……お察しです😭

近況のご報告(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側でクエリを高速化することも(スキル次第では)出来るでしょう。

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