数ニモ負ケズ、熱ニモ負ケズ (2004年7月17日:2)

 今年に入ってとある個票データを分析する仕事がおりてきました。希望とは (2004年2月29日:2)ぐらいに請求表を作り、4月にデータ利用を申請しました。データ申請の時から、データ量はCPS分析よりも遙かに大きくなることが予想されたので、5月に自宅パソコンを換装しました。

 約二年前のパソコン換装 (2002年7月4日:2)から使っていたDuronの1.2GHzからAthlonXPの3000+に換装しました。約17000円の出費は痛かったですが、それでもパソコンパーツの値段が下がるのは早いなぁと思います。PCをばらしてCPUを付け替えるのに約2時間、Windowsその他もろもろのインストールに約5時間で、休みの日を一日つぶして、ハードウェアとソフトウェアを換装しました。パソコン換装 (2002年7月4日:2)と同じく、通常のアプリケーションに関しては「言われてみれば早くなったかなぁ」という感じです。たぶん個票データ操作のような負荷のかかる作業であれば、作業効率は大分違ってくると思っていました。一通り快適に動いており、後はデータをもらって分析するだけと準備を整えていました。これで、もうあと2年はマザー&CPUを変えることはないだろうと思っていました。

 6月に頂いたデータは予想以上の大きさでした。300万強の標本数が3時点あるので約1000万のサンプルサイズ(パネルにすると400万程度)になります。一つ一つの標本における変数の種類も多く約2000行、約700種のデータがあります。文字数にすると1000万×2000行で約200億のデータになります。テキスト形式では合計24GBになっていました。

 当初CPSで慣れていたAccessで分析しようとVBAなんかを学んでいました。Access用に固定長読み取り用ファイル作成すること半月、ようやくできた〜〜ヽ(´ー`)ノ と思って読み取りファイルを回すと、無情にも「最大変数種の255を超えています。」みたいな表示が出ました。Accessの最大データサイズが2GB、最大変数種が255種で、読み込み変数種の最大値はExcelの列数と同じでした。データ容量に関しては分割ファイルをVBAで指定すれば良いかと思っていましたが、最大変数種はうかつにも想定外でした。策をいくつか考えましたが、結局Accessでの作業は断念しました。そんな感じでVBAの勉強は水泡に帰しました。おそらく、もう一生学ぶことはないでしょう。

 そういえば、この辺りの作業を試行錯誤している時期に、バッファローマンと戦う夢を見ました。夢ってのは不思議なもので、あり得ない設定でもなかなかその不自然さに気がつきません。初めは劣勢でしたが、夢だと気がついて(→明晰夢)から倒しました。起きた後も「まぁ、どうせ夢だ」ということであんまり気にしていなかったのですが、後から考えれば、彼の超人強度は、

1000万パワー

だったので、サンプルサイズ1000万のデータと格闘しているのと掛かっているのかもしれません。
恐るべし、潜在意識の連想ゲーム!

と自分で勝手に感心してしまいました。

 そんなこんなで、この手の大容量データ処理が得意なStataにて作業することになりました。当初はAccess⇒MATLABの順で、データの読み込み&整理&吐き出し⇒高度な推定&検定をする予定でしたが、Stata⇒MATLABの順で、データの読み込み&整理&標準的な推定⇒行列を用いた(新型)変則的な推定&検定の形になりました。Stataにも行列コマンドはあるのですが、やっぱり餅は餅屋でMATLABが使いやすいです。CSVデータ例
 調べて驚いたのですが、MATLABって右みたいなコンマ区切りのCSVファイルを変数名とともに読み込むファンクションファイルって(多分)存在しないのですね。「dlmread」や「csvread」を使えば、変数を行列として読み込むことはできるのですが、一行目にある変数名をベクトルの名前として一列ずつ読み込むことはできないようです。 「ないものは作ってしまおう」ということで一列目の変数名をベクトル名にして読み込めるMATLABのスクリプトファイルを書きました。(⇒Web倉庫に入っています。)

 Stataでコンマ区切りのoutsheetしたファイルなど、一行目に変数名があるcsvファイルは自動で変数名を作りMATLABで読み込むことができます。デフォルトではコンマ区切りデータ対応ですが、MATLABのスクリプトファイルにある 「%Data= dlmread(char(Datafile),' ',1,0);」 のコメントアウトを外せば、スペース区切りのデータ読み込み用となります。
 また、欠損値はすべてゼロで入ってしまいますので注意してください。MATLAB読み込みでは、元からゼロであったか?(欠測値⇒ゼロ)か?は識別できないようです。欠測値をNaNとしたい場合は、(エディターで開ける容量であれば)「,,」を「,NaN,」と置換すれば良いと思います。Read_co ('sample_co')として読み込めるファンクションファイルにできるか?と1、2時間試行錯誤してみましたが、変数名付けができませんでした。できた方は賞賛しますので、ご一報ください。


 7月上旬の最高気温が35℃を超えた日、doファイルを書いて一県で回るかをテストした後、47都道府県でループを組んで回していました。一県だけの読み込みでも3分程度かかってしまうので、2時間ぐらいはかかると思い、パソコンを離れて昼飯を作っている時に事件は起きました。

「ひゅーん」
と聞いたことのない音を出して、パソコンの電源が落ちたのです。作成したdoファイルもしばらく保存していなかったので、電源スイッチ押しても起動しない時はマジで焦りました。コンセントを10秒程度抜いた後、もう一度入れてからスイッチを入れると無事に起動しました。その後同じ作業プログラムを回しても、落ちるポイントはばらつきますが、数分で落ちてしまいます。しばらく試行錯誤していると新たに
「じゅわ じゅわ じゅわ」
という異音が聞こえてきました。神経質になっていたので焦りましたが、火にかけていた味噌汁が吹きこぼれた音でした。

 昼飯を食べて落ち着いてから、Super πなんかにかけてみても、やっぱり数分で落ちてしまいました。Stataプログラムのせいではなく、電気容量か熱で落ちているようです。CPUの温度は負荷なしで約58℃、負荷をかけると65℃程度まであがってから落ちてしまいました。エアコンをつけると落ちるまでの時間が延びますが、落ちることには変わらないのでハードウェアを再び換装することにしました。

 CPUのレベルを下げることを除けば、交換候補となるパーツは全部で4通りです。

音無しぃ 単に再起動がかかったり、電源が切れたりするわけではなく、落ち方が異常でした。電源の排気口から出る熱風がかなり熱いので、電源が熱もしくは電気容量で落ちているのではないかと考えました。それまで付けていたEvergreenのSilent King(350W)の評判は悪くないのですが、まず電源を交換してみることにしました。他の三種のパーツを入れ替えるためにはマザーを取り外す手間があるので、電源であって欲しいという希望推測もありました。その日のうちに秋葉原に向かい、新しく岡谷エレクトロニクスの音無しぃ(400W)を買いました。

 電源を付け替えると、ほぼ同じ室温でも3℃程度CPUの温度が下がり、負荷なしで55℃程度になりました。夜中にSuperπ3355万桁を走らせても、走りきるので安心かと思っていましたが、次の日の日中にSTATAを走らせるとやっぱり落ちてしまいました。はじめから多分そうだろうと思っていましたが、電源容量ではなく、熱のせいで落ちているようです。エアコンをかければ落ちずにすむこともありますが、「落ちるかもしれない」と思ってプログラムを回すのは、精神衛生上も良くないし、落ちなくても高温はパーツの寿命に良くないので、再びパーツを交換することにしました。
 残る候補はマザーボード、PCケース、CPUクーラーの3つです。いずれの交換も、マザーボードをいったんケースから外す必要があり、面倒です。一月前にCPU交換をしたときは、2年後くらいの

ロングホーン

が安定したときに再びマザー&CPUを変える予定でしたが、換装から1ヶ月でマザーを外す羽目になりました。

 まずはPCケースを換装することにしました。暑くなってからHGSTのHDD(HDS722512VLAT80)がサーマルキャブレーション音でニャアニャア鳴くようになりました。CPUだけではなく、HDDの冷却も考えてPCケースを換装することにしました。いくつか目星をつけて秋葉原を彷徨うこと2時間、品薄であったOwltechのOWL-ASOP-03を発見しました。アルミケース&パッシブダクト(←ケースの左面にCPUファンの熱を逃がす穴がある)で高い冷却性能が期待できそうです。前日に電源を買ったためツクモにて電源外しの2000円引きにて購入しました。400W電源が2000円というのももったいない気がしましたが、ただでさえSilent King(350W)が使えるまま余ってしまったので、家に電源在庫を増やす必要はないと思い、電源を外しての購入を決めました。

 後は、マザーとCPUファンを買うべきか、買わざるべきかを考えました。これまで使っているマザーに何となく不信感を持ってしまったので、疑心暗鬼にならないようにマザーは交換しておくことにしました。こういう事態になるなら初めから、Socket754で組んだ方が良かったと後悔しつつも、今そこにあるAthlonXP 3000+を生かすべく、安定&安価を考えてMSIのK7N2 Delta-Lを買いました。(後に既存のマザーは、売却しました。優しく使ってくれるユーザーのもとに行くことを祈っています。)
 CPUクーラーはそれまで使用していたSPEEZEのFalconRock II(右図)は、静音性を重視しているので、リテールクーラーと大差のない冷却能力ですが、それなりに定評のあるクーラーです。ファン回転数を調節でき、冷却能力の高いSCYTHEのSCSM-1000(SAMURAIクーラー) を買うかを迷いましたが、「電源」、「ケース」、「マザー」を買い換え、出費が大きすぎる感もありました。それにOWL-ASOP-03は「マザーボード背面抜き取り式」なのでCDドライブやHDDを外さずとも、マザーを後ろに抜き取ることができます。よって再び落ちるという事態に陥っても、30分もあればマザー&CPU交換ができます。またSCSM-1000(SAMURAIクーラー)は大きめなので、ケースのパッシブダクトとの干渉も気になったので、 とりあえずケース交換とマザー交換で様子を見ることにしました。

CPUクーラーCPUの温度

 重たいケースを埼玉県川口市まで持ち帰り、家に着くと夜の8時になっていました。前のケースからパーツを外し、マザーを取り付け、BIOSでの温度がCPU49℃、システム39℃で、以前のマザー&ケースよりも約5℃低い表示になっていました。午前1時にWindowsインストールを実行させてから眠ると、次の日はテストに最適の真夏日でした。ベンチマークで負荷をかけても、最大57℃でおさまりました。エアコンを弱めにつけて、負荷をかけない作業をすれば、CPUは40℃後半、システムは30℃後半になります。室温33℃で負荷をかける作業をしても、CPU最大温度は60℃未満におさまります。
 ようやく元のStata作業に戻って、1000万×2000行の47都道府県のループをクリアーいたしましたやりました。。一つのプログラムが回って、こんなに感動を感じたことは、久々です。しかもソフトウェア的に回ったことに感動したのではなく、ハードウェア的に回ったことに感動しました。うれしくて、無意味に3回プログラムを回しました。日中でもSuperπ3355万桁が54分前後で安定して回ります。

 こののち1000万プログラムは、compress&パネル化してdtaファイルにしても9GB程度となることが分かりました。プログラムの自由度を高めるために、メモリーを512MBから1024MBに増強させ、Dual Channel化しておきました。というわけで、ようやく新パソコンが安定軌道に乗ったはずです。スペックは

パーツ メーカー 名称/型番
Mother Board MSI K7N2 Delta-L
CPU AMD AthlonXP 3000+
Memory no brand PC3200 512MB (CL2.5)×2
HDD HGST HDS722512VLAT80
VGA SAPPHIRE Radeon 9600SE
Sound Creative Sound Blaster Digital Music
電源 岡谷エレクトロニクス 音無しぃ(400W)
CD/DVDドライブ1 I・O DATA DVR-ABN4
CD/DVDドライブ2 I・O DATA DVD-AB8T
FDD Panasonic JU-256A(多分)
PCケース Owltech OWL-ASOP-03
CPUファン SPEEZE FalconRock II
ディスプレイ NANAO Flex Scan 54T

新PC2004

 という感じの構成になりました。最近PCケースは銀色や黒が増えてきてアイボリー(象牙色)が減ってきていますが、まだドライブはアイボリーが主流なので、なんだかアンバランスです。かといって銀ベゼルを買っても、銀色が微妙に違ったりするから困ったものです。上のCD二つのドライブも両方ともアイボリーですが、明らかに違う色です。見てくれはそんなに気にしないのですが、色って規格を合わせたりしないのでしょうか?  

ともあれ、これでハードウェア的に安定した(と信じたい)ので、後はStata&MATLAB作業に専念するのみです。