日記・備考録
Diary/Memorandum

2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014/ 1 2 3 4 5 6 7 8 9 10 11 12 | 2015
May June
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
July | Home

2014/07/01〜

...................................................................................................................................

2014/06/30

近藤, 準天頂衛星システム対応受信機, 宇宙政策セミナー (第10回 大阪), 2014年2月24日

古野電気のQZSS対応受信機。LPY-10000はちょっと使ったことがあるけど、結構スカスカの筐体で********円とのことで、コストパフォーマンス悪いなあとは思った。FPGAベースで注文生産だから高いの仕方ないのだけど、u-bloxなんかの安価で小型高性能の受信機を使いなれていると、何とかならないのかなあとも思った。といっても古野は貴重な国産受信機メーカの一つなので頑張って欲しいとは思う。ところで、GN-87FってubloxのNEOとフォームファクタ同じ?

補足: GN-87FNEO-7って完全なピンコンパチという訳ではないらしい。せっかくなので仕様を比較してみると、GN-87F vs NEO-7M: CH数=26CH vs 56CH、電力=72mA (捕捉) vs 17mA (continuous)、I/F=UART/TimePulse vs UART/USB/TimePluse/SPI(OPT)/DDCと、u-bloxに比較してあんまり良いとこ無い様に見える。u-blox M8Nで既にBeiDou対応済みだし。raw出るし。(17:01追記)

-------------------------------------

u-blox NEO-M8NでBeiDouの信号を受信できる様になったのでずっと航法データの内容を観察しているのだけど、AODE (age of data, ephemeris) とAODC (age ot data, clock) の更新の仕方が良く分からない。BeiDou ICD (5.2.4.11) 見ると例えばAODEの定義は、

> Age of data, ephemeris (AODE) is the extrapolated interval of ephemeris parameters.
> It indicates the time difference between the reference epoch of ephemeris parameters
> and the latst observation epoch for extrapolating ephemris parameters.

とある。ただ、値は "<25: age of the satellite ephemris parameters in hours" とあるだけで、25未満でどう更新されるのか不明である。実際、AODE=1, AODC=0固定の衛星が多いのだけど、毎時カウントアップしている衛星もある。カウントアップしている衛星でも時間帯によっては1に固定されている。また、RINEX 3.02 (A 13) ではBeiDou nav dataとしてIODEとIODCが定義されているが、これに何を入れれば良いのか良く分からない。MGEXのcombined navデータ (brdmnnn0.yyp) 見るとAODEとAODCの値が入っている様なので、とりあえずこれに合わせているのだけど。ちなみに、AODEは1固定だったりするのでエフェメリス更新をこの値で判定することはできない。最初、RTKNAVIの起動後2時間位経つとBeiDouが使えなくなってしまう不具合があったのだけど、よく調べると原因はこれだった。以上の様に、BeiDouは衛星自身にも各種規格にもまだまだ謎が多い。継続してフォローが必要であろう。

...................................................................................................................................

2014/06/29

RTKLIB Support Information

rtklib 2.4.2 p8で受信機関係のご要望を取りこみました。関連受信機を使用しなていない方はアップデートは必要ないと思います。なお、従来通りpatchパッケージも提供しますが、GIT使いの方はGITHUBからgit fetchまたはpullで持ってくるのが簡単かと思います。

-------------------------------------

ということで、いまだublox M8N TRK-MEASの解析をしてる訳だけど、やっとphase polarityを表すフラグが分かった。これでhalf-cycle ambiguityが解ける。以下、ゼロ基線、GPSのみのRTK。ノイズは特に問題ない。基準局はNovAtel OEM6。なお、GLONASSはIFBが大きくて、M8N対抗でないとアンビギュイティは解けない。

...................................................................................................................................

2014/06/25

IGS WS@パサデナ。会場はCaltech。今回は参加者200人以上で盛況。内容的にはいつもの通り。これで3連続で参加しているのだけど次は良いかという感じ (これは前回も書いた)。

...................................................................................................................................

2014/06/22

BeiDou航法データデコーダを鈴木君が書いてくれた様で。さすがに仕事が早い。どうもありがとう。少し試験して問題なければ、マージして再アップします。なお、RTKまで行けるかはまだまだ未知数。

-------------------------------------

ということで昨日からの成果を非公式パッチで。GLONASS-BeiDouの切り替え用のコマンドファイルも添付。

-------------------------------------

An informal patch for ublox M8N raw messages (TRK-MEAS and TRK-SFRBX) is available at rtklib_2.4.2_p_ubx.zip. The BeiDou navigation data decoding is not yet supported.

-------------------------------------

NEO-M8N+RTKNAVIのBeiDou受信モード。航法データはTRK-SFRBXとして出ているけど、デコードが未なのでBeiDouはまだ使えない。基本的にICD読んでデコーダ書くだけなんだけど、D1とD2両方書く必要あるし...。気力があれば。ちなみにIGS MGEXでBeiDouの航法データが公開されているので確認はこれと比較すれば良い。ついでにBeiDouの精密暦も既に公開されている (Wuhan と GFZ)。

今回入手したNEO-M8NボードのF/Wバージョンは2.01。将来のバージョンでは対策されて、TRK-MEAS, TRK-SFRBXが止められる可能性もあるのでご注意を。なおRTKLIBの次のメジャーパッチでは、(非公式の) TRK-MEASとTRK-SFRBXのサポートは入る。

補足: TRK-MEASの更新レートは2 Hzが限界っぽい。u-centerのConfigure - Ratesで100msとかの設定は可能だけど、正常にメッセージが出力されなくなる。受信機のCPUが間に合っていないと思われる。もしかするとSBAS disableにすると10 Hzでも出る可能性もあるけど。(10:10追記)

...................................................................................................................................

2014/06/21

NEO-M8N+RTKNAVI。BeiDou航法データは... ICD読む気にならん。あとLLIが出ない。暫定改修版のublox.cはここ

-------------------------------------

TRK-MEASのデコードは結構難易度が高い。ロシア人の情報が無かったら多分無理だったと思う。感謝。CAとC1が両方出てしまっているのはrinex.cのバグ。これはこれから直す。

-------------------------------------

せっかくなので、ublox M8NのTRK-SFRBXとTRK-MEASの解析祭りに参加するか。まず必要なメッセージ出すための設定。RTKNAVIのSerial/TCP Commands設定。

補足: 以上差し替え。!UBXの各フィールドは16進ではなく10進で入れる必要があるので以上が正しい。何故今まで動いていたかは不明。(6/22追記)

TRK-SFRBX (0x03 0x0F) とTRK-MEAS (0x03 0x10) が出る様になる。このメッセージどうもデバッグ用で、仕様非公開なので皆解析している訳だ。TRK-SFRBXにはraw航法データ、TRK-MEASにはraw観測データ (疑似距離、搬送波位相、ドップラ、C/N0) が入っているらしい。まずはこれをログに落とす。

-------------------------------------

IPNTJ, Summer School on GNSS 2014, July 28 - August 2, 2014, Tokyo

今年のサマースクールの準備をぼちぼちと始めているのだけど、今年は受信機としてNovAtel OEM628を6台位は調達できそうなので、MADOCA-LEX-PPPや、GPS+GLO+BDS+QZS RTKの実習ができそう。参加を予定されている方はご期待を。あと色々とご協力いただいている皆さんに感謝。

-------------------------------------

OpenStreetMap Forum

おお、すばらしい。ついにTRK-MEASの解析が大体済んだ様で。

これで、NEO-M8N×2でGPS+GLO+QZSかGPS+BDS+QZS RTKが。

-------------------------------------

NAVIO RAW ポチってしまった。$20,000超えたので専用ケースも作ってくれるかな。

久しぶりに、ちゃんとINS/GPS統合のコードを書いてみたいというのが一つ、あとPPP/気圧計統合というのも面白いと思っているので。

...................................................................................................................................

2014/06/20

Avionics for HPA, ublox NEO-M8NによるGNSS衛星の航法メッセージ出力, 2014/06/20

おお、すばらしい。ちなみにGLONASS航法メッセージストリングのデコードは2.4.2 p7でHemisphere用に必要があってrtklib/src/rcv/crescent.cに追加したので、流用ください。BeiDouは...、ICD読む気にならん。

...................................................................................................................................

2014/06/19

RTKLIB: Support Information

基線解析で衛星数が32を超えると一部衛星が無効になる不具合。自分でAPのリビルド出来る方は当面rtklib.hの定数MAXOBSの値を増やして対応下さい。正式には次のパッチで対応します。開発当初は32衛星超えるなんて思いもしなかったので、と言い訳をしておこう。

-------------------------------------

ということで、CSGショップからublox NEO-M8Nのボード届いたので、久しぶりに最新のu-centerをインストール。サクッとGLONASSが受かるのは良いのだけど「みちびき」が受からないなあ。あと、BeiDou受信モードに切り替えるのはどうすれば良いのだろう。誰かM8N使っている人教えて。

補足: u-centerを良く見たらいつの間にか古いバージョン (v.6.30) を起動してた。最新版 (v.8.00) を起動して Configure - GNSSでBeiDouをenable, GLONASSをdisableに設定して"Send" すれば良い様。でもやっぱりQZSSもBeiDou受からないなあ。cold resetすれば良いのかなあ。(15:48 追記)

再補足: どうも受信機はBeiDouやQZSSトラッキングしているのだけど、NAV-SVINFOを出力する様にしないとu-cener画面に表示されない様。Configure - Message - 01-30 NAV-SVINFO - USBをOnに設定してSend。さて後はロシア人がハックしてくれるのを待つだけ。(16:18 追記)

再再補足: u-centerのスカイプロット、C/N0プロットでは、デフォルトではNMEA $GPGSV, $GLGSV拾っているのではないか。BeiDouとQZSSのトーカーIDってまだ正式に定義されていないはずで、BeiDouとQZSSが表示されないのはこれが原因かも。(6/20追記)

-------------------------------------

ASCII.jp, GPS頼りのリスク-日本の測位衛星事情, 2014年6月19日

いつの間にか谷島さんがインタビュー受けている。しかしLHTCって「衛星メーカー」なのか。(別に衛星作ってない様な)

補足: 「今後打ち上げる予定の次世代準天頂衛星には、「ガリレオ」の信号も受信できる機能が盛り込まれる」というのは多分記者の誤解であろう。(知る限りそんな話はない) (6/21追記)

...................................................................................................................................

2014/06/18

OpenStreetMap Forum

ロシア語読めないんだけど...。

...................................................................................................................................

2014/06/17

IGS 70局×1年分のRINEXデータ入力してAWS EC2で解析を流したいのだけど、tar-gzipで圧縮してもデータサイズが30GB以上になってしまう。今、AWSとの通信速度は2MB/s位しか出ていないので、データアップロードだけで4H以上かかる。AWS内なら30MB/sは出ているのだけど。少し大きめの解析では入出力データが数100GBになることも多いのでAWSで解析流すのはここがボトルネックとなる。必要なデータだけ抜き出してパッケージ化するのも面倒だし。この辺は手元に計算機がある方が明らかに有利。

補足: 実際約31.5GBのデータをアップロードしているのだけど、今日は10.3MB/sも出ている。接続は普通のNTTの光回線なので速度はほぼ限界。この前は何度やっても1.8〜2MB/sしか出なかったのだけど。時間帯によって速度が変わるのかもしれない。(6/18追記)

-------------------------------------

SpaceFlightNow, Glonass navigation satellite launched by Soyuz rocket, June 14, 2014

2014/06/14 17:16 UTC, 1機のGLONASS-M衛星、ロシア プレセツク宇宙基地よりソユーズ2-1bロケットで打ち上げ成功。GLONASS衛星としては55機目。衛星はプレーン3、スロット21に投入され数週間後には運用開始される予定。L3帯の実験測位信号を送信する機能を持つ。今年末までにあと3機のGLONASS-M衛星の打上が予定されている。

-------------------------------------

AWS EC2便利なのでいつの間にか使いすぎた。内訳見てみるとm3.medium (オンデマンド) ×68H、c3.8xlarge (スポット) ×81H、EBS×(24GB月+8.6MIO)、EIP×187H、Data Transfer×338GB、他。最後のData TransferはAZ間やEIP介して使うとかかるみたい。EBSは実際に格納したデータ量分しか料金がかからない様だが、もしそうだとすると、作業ファイル作ってすぐ消したらどういう課金になるのだろう。AWS、ずいぶんと勝手が分かってきたが、料金についてはまだ色々と謎が多い。

...................................................................................................................................

2014/06/15

IndieGoGo, NAVIO: Autopilot Shiled for Raspberry Pi

オートパイロット用Raspberry Piシールド。IndieGoGoで資金を集めている。ublox NEO-7Mか6T、9軸IMU、気圧・気温計、サーボコントローラ、ADC等が載っている。7M版が$145、6T版が$195 (送料別)。Raspberry Piは別途必要。RTKLIBのポーティングもやっている様だけど、さすがにGPS/INS統合のコードは自分で書かないといけないんだろうなあ。意欲のある人は是非チャレンジを。

...................................................................................................................................

2014/06/11

AWS EC2のインスタンス解析が終わったのに停止するの忘れてた。ということで無駄な料金が発生。といっても、オンデマンドのm3.mediumなので1時間$0.07で、30H位で計$2.1也。多分、24hつけっぱなしにしているうちの計算機群の電気代の方がずっと高い。

-------------------------------------

NANU2014049

5/17に打ち上げられたGPS IIF-6 SVN67/PRN06が運用開始。2014/6/10 17:30 UTCから。軌道上検証期間は約3週間でいたって普通。現在運用中のGPS衛星は31機でPRN09が欠番。更新したRTKPLOT用のTLE_GNSS_SATNO.txt

...................................................................................................................................

2014/06/10

UbloxRAW

ubloxのF/Wをクラックしてraw出させようとしている一連の人がいる様で貼っておく。ublox 6ってこんなに一杯F/W種類があるんだ。M8Nも試みている人がいるらしい。ということでCSG shopでNEO-M8Nのボード注文してしまった。送料込で$72.99也。別に、raw出るとは思ってないけど。

...................................................................................................................................

2014/06/06

GPS World, Russia Turns off Data from IGS GPS Tracking Stations, June 2, 2014

ウクライナ情勢を受けた米欧のロシア制裁の対抗として、米国が利用中のロシア国内GPS追跡局データ提供を停止すると声明が出されていたが、実際に5/31から11局のIGS局データが止まった様だ。

NRIL (Norilsk) とかTIXI (Tixi) とかARTU (Arti) は近くに局が無いので、幾何学配置が悪くなってIGS精密暦の決定精度に少しは影響があるかもしれない。

補足: 関連記事。GPS追跡局データだけじゃなくてISSの運用やロケットエンジン調達にも影響が大きい様だ。(16:30追記)

-------------------------------------

AWS EC2による解析効率化。結局以下の様にすることにした。

(1) 解析サーバとして、ubuntu server 14.04 (HVM) c3.8xlargeのスポットインスタンスを3つ生成。availability zone (AZ) はファイルサーバと同一とする。AZを選ぶためにはインスタンス生成時のstep 3: subnetで指定する。maxinum priceは$0.3 だけど今のところ強制終了されたケースはない。(AZはus-west-2b) なお、同時に生成できるスポットインスタンスの数も制限があり通常は5個まで。
(2) 解析サーバが立ちあがったら、ファイルサーバで以下の様なデータアップロードスクリプトを実行。アプロードスクリプトではtar.gzで固めたAPと入力データを解析サーバにコピーして解凍する。事前に圧縮したファイルをscpで送る方がrsyncより速い。全データ47GBで10分弱。同時に解析サーバの足りないパッケージをインストール。

#!/bin/sh
remot=$1
ssh $remot "sudo chmod a+w /mnt"
for pkg in pkg*.tar.gz ; do
   scp $pkg $remot:/mnt
   ssh $remot "cd /mnt; tar xfz $pkg" &
done
ssh $remot "sudo apt-get install gfortran -y"
wait

(3) 解析実行と解析結果回収を行うスクリプトで解析を6つに分割して、各解析サーバで2並列でssh実行。2並列で実行するのは、1プロセスだと解析サーバのCPUを使いきれないから。

(4) 以上実行が終わったら解析サーバのインスタンスを終了。これは今のところ手動で。

以上でCore i7 2600K 1台で39時間かかっていた解析が8時間弱で実行できる様になった。CPU使用料金は$0.3/h×3×8h=$7.2で、EBS使用料金やデータ転送料を入れて全部で\800位。でもAWSって、利用料金が気になってログインして色々作業するのには全く向いていない。基本的にはローカルで事前に全部確認してから利用する必要がある。解析を10分割して5インスタンスで実行する様にすれば、5時間位で行けそう。

...................................................................................................................................

2014/06/03

E5-2680v2×2サーバの消費電力は例えばこれによると25度C高負荷時で最大1184W。東電の従量電灯B,Cは\19.4〜29.9/KWh。電気代を第2段階として、1.184KW×\25.9/KWh = \30.7/h。これにはネットワーク機器や空調の電気代は含まれていない。

-------------------------------------

思ったより高かったのだけど、Surface Pro 3 ポチってしまった。結局、PDF文書を縦位置で1頁表示したいだけなんだけど。これ普通のノートPCの横位置画面では無理なので。

...................................................................................................................................

2014/06/02

クラウドコンピューティング

クラウドの復習。クラウドにはSaaS, PaaS, IaaSとあるのは良く知られているいるけど、Amazon EC2はIaaSに分類される様だ。標準では確かに仮想H/W+OSまでだけど、高機能のAMI等も提供されているのでこれらはPaaSに近いのかも。

-------------------------------------

これはあんまり書きたくないのだけど、特にAWS EC2のスポットインスタンスは今のところかなりお買い得。AWS EC2 DashboardのSpot Request - Pricing Historyで過去のスポット価格を見れるのだけど、例えば過去1週間分のc3.8xlargeのスポット価格を以下に示す。大体、$0.3/H前後で推移している。これは、下手したら自前で計算機運用するための電気代より安い。まあ、航空機の座席と同じで、CPU遊ばせておくよりディスカウントしてでも売った方が得ということなのだろうけど。もちろん、お買い得なことに皆が気付いてしまったら、今後価格が高騰する可能性もある。

-------------------------------------

なんか、AWSを実際に使ってみると従来のシステム構築の方法論が根本から変りつつあるのを感じるなあ。少なくとも今後クラウドを使えないシステムエンジニアは用なしになる可能性が高いかも。まあ新しいこと覚えるの大変なので、年寄りは無理して勉強しなくても良いかもしれないけど。

-------------------------------------

ということで、AWS EC2上に本格的に解析環境を作る。以下メモ。

(1) まず、ファイルサーバを作る。AWS Dashboardで"Launch Instance"クリック。AMIはUbuntu Server 14.04 LTS (HVM)。インスタンスタイプはm3.medium ($0.07/H)。Step 4: Add Storageで"Add New Volume"をクリックしてType =EBS, Size =100GiBでEBSストレージ追加。後は全部デフォルトでインスタンスをLaunch。

(2) インスタンスのステータスがrunningになったら、メニューAction - Stop、Startで停止・再起動してみる。スポットインスタンスではなく、オンデマンドインスタンスなのでterminateしないで停止できる。ルートと追加ストレージはEBS上に取られるのでインスタンスを停止しても保存される。停止・再起動でPrivate IPアドレスは変わらない様だがPublic IPは再割り当てされる。再起動でPublic IPが変わらない様にするためには、Elasic IP (EIP) を取って割り当てればよい。ただしインスタンス停止中はEIP利用料金が別途かかる ($0.005/H)。AWS内アクセスはPrivate IPで行うものとして、ここではとりあえずEIPは取らない。

(3) SSHで起動したインスタンスに接続。

(4) EBSに追加したストレージは自動マウントされないので、この手順に従いフォーマットしてマウントする。

$ sudo mkdf -t ext4 /dev/xvdc
$ sudo mkdir /ebs
$ sudo mount -t ext4 /dev/xvdc /ebs
$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/xvda1 8115168 783216 6896676 11% / none 4 0 4 0% /sys/fs/cgroup udev 1922456 12 1922444 1% /dev tmpfs 385484 332 385152 1% /run none 5120 0 5120 0% /run/lock none 1927416 0 1927416 0% /run/shm none 102400 0 102400 0% /run/user /dev/xvdb 4057280 8252 3839596 1% /mnt /dev/xvdc 103081248 61044 97760940 1% /ebs

(5) 解析試験のためm3.mediumのインスタンスをもう一つ起動。試験用なのでスポットインスタンスを利用。今、us-west-2cが極端に安い ($0.0081) のでMaximum priceを$0.01にする。スポットの場合リクエストが受け付けられて使える様になるまで少し時間がかかる。

(6) ファイルサーバから解析サーバSSH接続するため、(5) でインスタンス生成に使ったSSHキーをWinSCPでファイルサーバに転送。ファイルサーバでSSHキーを格納。
$ mv xxxx.pem ~/.ssh/id_rsa
$ chmod og-rw ~/.ssh/id_rsa

(7) (5) で起動した解析サーバにSSHで接続。(xxx.xxx.xxx.xxxは解析サーバのpublic IP。何故かprivate IPでは接続できない)

$ ssh xxx.xxx.xxx.xxx

(8) 接続できることを確認したらいったんログアウトしてSCPでファイルサーバのファイルを転送。

$ ssh xxx.xxx.xxx.xxx sudo chmod go+w /mnt
$ scp file xxx.xxx.xxx.xxx:/mnt

転送速度は、1.7GBのファイルで35.5MB/s位出ていて問題ない。割り当てられたファイルサーバのゾーンはus-west-2bで解析サーバはus-west-2c。AWS内のデータ転送でも、同じAWSリージョンの別のアベイラビリティゾーン (us-west-2がリージョン、b,cがアベイラビリティゾーン) 間では$0.01/GBの転送料金が発生する (参照)。従って解析サーバはファイルサーバと同一のリージョン・アベイラビリティゾーンで生成した方が良い。

(9) ここまでで、ファイルサーバから解析サーバにSCPでファイルを送りこんで、SSHで解析コマンドを実行し、解析結果をSCPで回収する準備ができたので、あとは、解析実行のスクリプトと入力データを含めた解析用パッケージを作れば良い。この作成はローカルで行えばよいので、とりあえず試験用インスタンスをterminateし、ファイルサーバはstopする。この状態で発生する料金はEBSストレージ保持のための料金で$0.05/G/月。

補足: EBS (スタンダードボリューム) の料金は「プロビジョニングした大きさ (GB/月)」で決まり「毎月料金が発生」するとある。「プロビジョニング」の意味が曖昧だけど、実際に格納したデータサイズではなく、確保したボリュームサイズを指しているのだろう。すなわち100GBなら$5/月。なお「スナップショット」の場合は実データのみしか保存されないので、使わないデータはスナップショットに保存してスタンダードボリュームから退避した方が良い。(20:08追記)

(10) ファイルサーバのスクリプトで解析サーバをスポットで自動生成し、解析が終わったらterminateするのはAWS CLI使わないと無理そうで、ちょっと難易度が高い。当面はウェブインターフェースで手動生成すればよいだろう。まあ探せば、AWS上のバッチジョブ制御用のツールがあるかもしれない

-------------------------------------

玉川, AWSマイスターシリーズ "Reloaded" ~ EC2 & EBS ~, 2012年1月23日

少し情報が古いけど、AWS EC2について良くまとまっているので貼っておく。ということで、同一入力の複数解析を、最短時間、最小料金で実行するために、どう設計したらよいか思案中。安いインスタンスとEBSで共有ストレージ作って、解析側では、共有ストレージマウント→rsyncでローカルコピー→解析実行→必要な結果だけを共有ストレージに書き出し→インスタンス終了、というスクリプトを流すのが良いかな。コピーが必要かはデータ転送性能次第。インスタンス生成を、ウェブインタフェースを使わないで、自動実行できないと色々と不便なのだけど、これはどうすれば良いのだろう。

補足: AWSをコマンドラインで制御するためのライブラリはAWS CLI (AWS command line interface)。ソースはGITHUBから。使い方の参考はこの記事参照。(10:40追記)

再補足: 共有ストレージはEBSでデータ量で課金されるので、ローカルストレージサイズが間に合えば、圧縮して置いておいて解析開始時にコピー・解凍するのが良さそう。(10:50追記)

...................................................................................................................................

2014/06/01

EC2 c3.8xlargeがなんか急に速度が出る様になった。

matmul()   200 x   200: time=   0.005 s (  3192.0 MFLOPS)
matmul()   500 x   500: time=   0.002 s (124875.0 MFLOPS)
matmul()  1000 x  1000: time=   0.015 s (133266.7 MFLOPS)
matmul()  2000 x  2000: time=   0.777 s ( 20586.9 MFLOPS)
matmul()  5000 x  5000: time=   1.325 s (188660.4 MFLOPS)
matmul() 10000 x 10000: time=  10.439 s (191579.7 MFLOPS)

変えたのは、AMIをUbuntu Server 14.04 LTS (PV) から、Ubuntu Server 14.04 LTS (HVM) に入れ替えただけ。カーネルバージョンが少し違うのかなあ。ということで、OMP_NUM_THREADSを変えて、某APをテストデータで走らせてみた。

OMP_NUM_THREADS EXEC TIME
-               191.2 s
12              203.9 s
16              189.0 s
20              186.9 s
24              190.8 s

思った通り、最大スレッド数を物理コア数 (20) に制限した方が性能が上がる。ちなみに同一条件で、i7 4770Kでは214.4 s、i7 2600Kでは300.7 s。E5-2687W×2の結果が手元にないが確か180 s位だったはず。概ね予想通りの性能で、これでスポットインスタンスで使って1時間当たり30円なら、結構使えるのではないか。

補足: そもそもPVとHVMって何が違うのだろう、と調べていたらそのものの記事を見つけた。結局Xen上での仮想化方式が違うみたいで、ベンチマークでは勝ったり負けたり。まだ新しいリリースみたいなのでPV側のAMIにバグが残っているのかもしれない。(22:23追記)

-------------------------------------

以下に書いた作業で大体1時間位EC2 c3.8xlargeのスポットインスタンスを使ったのだけど、AWSの今月の課金情報を見たら、

となっていた。利用直後は$0.00だったので更新されるのに少し時間がかかるらしい。これ見るとスポットインスタンスの料金って、生成時に指定したMaxium priceではなくて、その時々の変動料金で決まるらしい。とすればMaxium priceを例えばオンデマンド並みに十分大きくすれば途中で終了させられるリスクを最小化できるのかも。
EC2上でMKLのマルチスレディングを有効にする方法については未だ情報見つからず。

補足: スポットインスタンスの場合、Actionとして選べるのはTerminateかRebootだけなのでStopでインスタンスを止めて、リソースを保持したまま課金だけ防ぐのは出来ないっぽい。まあ良く考えれば当たり前か。MKL以外のOMPはマルチスレッドで動いていてCPU負荷も上がるのでMKLの設定の問題で解決できるかも。(19:52追記)

-------------------------------------

インスタンス生成時のオプション Step 3: Configure Instance Details のPurchasing option を Request Spot Instances にすればインスタンスが生成できることが分かった。これ利用料金が「時価」で、CPUが空いたときに動的に割り当てられるみたい (参照)。Spot Instanceを使う場合は、Maximum price を指定する。これはCurrent priceを参考に$0.3にして、あとはデフォルトでインスタンスを起動して接続。OS, ディスク, CPU, メモリは以下の通り。CPUは32コアで見えている。ディスクはデフォルトではルートが8GBで、残りのローカルストレージは/mntにマウントされる。

ubuntu@ip-172-31-8-86:~$ uname -a
Linux ip-172-31-8-86 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-172-31-8-86:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/xvda1       8125880 1081564   6608504  15% /
none                   4       0         4   0% /sys/fs/cgroup
udev            30820624       8  30820616   1% /dev
tmpfs            6166308     192   6166116   1% /run
none                5120       0      5120   0% /run/lock
none            30831524       0  30831524   0% /run/shm
none              102400       0    102400   0% /run/user
/dev/xvdb      330119788   68428 313275580   1% /mnt
ubuntu@ip-172-31-8-86:~$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 62
model name      : Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
stepping        : 4
microcode       : 0x415
cpu MHz         : 2793.316
cache size      : 25600 KB
physical id     : 0
siblings        : 32
core id         : 1
cpu cores       : 1
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu de tsc msr pae cx8 apic sep cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt tsc_deadline_timer aes rdrand hypervisor lahf_lm ida arat epb pln pts dtherm fsgsbase erms
bogomips        : 5586.63
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:
...

ubuntu@ip-172-31-8-86:~$ cat /proc/meminfo
MemTotal:       61663052 kB
MemFree:        60603820 kB
Buffers:            8048 kB
Cached:           560248 kB
SwapCached:            0 kB
Active:           122656 kB
Inactive:         462428 kB
Active(anon):      16900 kB
Inactive(anon):      176 kB
Active(file):     105756 kB
Inactive(file):   462252 kB
...

試験用のAPとデータ2GB位をWinSCPでアップロード。アップロード速度は変動するが1.7〜2.0MB/s位。昨日と同様にMKLを使った行列計算の単体テスト。

matmul()   200 x   200: time=   0.005 s (  3192.0 MFLOPS)
matmul()   500 x   500: time=   0.030 s (  8325.0 MFLOPS)
matmul()  1000 x  1000: time=   0.227 s (  8806.2 MFLOPS)
matmul()  2000 x  2000: time=   2.674 s (  5982.0 MFLOPS)
matmul()  5000 x  5000: time=  27.180 s (  9197.0 MFLOPS)
^Cmake: *** [utest11] Interrupt
全然計算速度が上がっていない。topで見ても100%までしか負荷が上がらないので、マルチスレッドで動いていないみたい。OMP_NUM_THREADSやMKL_NUM_THREASを設定してもダメ。なお、上記ベンチは、Core i7 2600K (4コア) で110GFLOPS、Core i7 4770K (4コア) なら180GFLOPS位は出るので、このままではクラウドを利用する意味は全くない。

補足: スポットインスタンスってオンデマンドに比較して凄く安いのだけど、安いなりの理由があって、起動時に指定した最大価格よりもスポット価格が高くなったら、そのインスタンスは終了 (terminate) されてしまうらしい。stopではなく、terminateということは途中経過やローカルストレージも全て破棄されてしまう。ということで、かなり投機的な利用方法である。(14:26追記)

-------------------------------------

ということで、試しにC3使ってみようと思って、c3.8xlargeの新規インスタンスをlaunchしようとしても、"Launch Failed: You have requested more instances (1) than your current instance limit of 0 allows for the specific instance type." とエラーとなってしまう。どうも今のアカウントではC3使えないみたいだな。これ制限緩和するのどうすれば良いのだろう。

補足: C3をオンデマンドで使うには制限増加申請が必要な様。ただここには20まで実行できるとある。M3はオンデマンドで使うには特に申請必要なかった。(6/2 追記)

-------------------------------------

さて、昨日書いたAmazon EC2で解析の件、どれくらい料金がかかるか具体的に見積もってみよう。ここで流したい解析は、某APによる某衛星の軌道決定問題で最適パラメータを求めるため、条件を10ケースぐらい振って結果を求めたい。入力データは約3年分で150GB位、最終的に回収したい解析結果はざっと3GB位。ただし直ぐには消したくない中間解析結果が100GB位はある。解析時間はCore i7 2600K (4コア) で1日分で約2分、3年分×10ケースで365H。E5-2687W×2 (16コア) で3倍程度速くなっているので、EC2 C3のE5-2780v2で同じくらい速くなると仮定する。以上よりAmazon EC C3利用料金は、

(1) CPU: $1.68/H×365H/3 = $205.0 (c3.8xlarge, Linux, オンデマンド, 米国東部)
(2) データ転送: IN $0.00, OUT (3GB-1GB)×$0.12/GB = $0.24
(3) ストレージ: (150G+100GB)×$0.05/GB/月 = $12.5 (Amazon EBSスタンダード, 米国東部)

計: $218 (ただしストレージは解析結果回収して確認したら消す)

データ転送速度は昨日のテストでの2MB/sとして入力データ転送に150GB/2MBps = 21H、解析結果回収 3GB/2MBs = 0.4H。(転送中もCPU停止できないからこの分の料金も見込む必要がある)

ちょっと気になるのはQ&A読むと単一のEBSボリュームを複数インスタンスで共有できないらしい。これは痛い。従って、同一入力データの解析を複数インスタンス並行で走らせて、高速化するというのがやりにくい。これは入力データをインスタンス間でコピーするか、samba等でファイル共有するかという話になる。コピーはストレージ料金がコピー分だけ余分にかかるし、ファイル共有はスループットが心配。なお、プライベートIPを使うと同一リージョンならデータ転送料金は無料になるらしい。この辺の最適解は結局、システム性能に依存するので実際にやってみないとダメだな。

あと解析って大体設定間違えて何度かやり直すのが普通なので、手元の環境で事前に十分確認して、解析やり直しを避ける必要がある。

こう考えるとクラウド使うのは一つはストレージがネックだな。すなわちデータ移動のコストが高いし、少し過剰品質でストレージ自身のコストも高い。自前で揃えれば、100MB/sまでは簡単に出て、ストレージ自身も今なら4TBで$150だし。

補足: ストレージはEBS使わないでも、C3ならSSDのローカルストレージ (インスタンスストア) が含まれている。これインスタンス停止しただけなら消えないはず。消えないなら、停止中は利用料金発生しないのでこれだけでも良いかも。そうすると複数インスタンス使って解析高速化するためには、

(1) 1インスタンス起動。入力データをローカルストレージにアップロード。
(2) 追加インスタンス起動。(1)の入力データをrsyncでローカルストレージにコピー。
(3) (1) (2) で解析実行。解析結果回収。回収終わったらインスタンス停止。
(4) 再解析の場合は、必要な数だけインスタンス再起動、設定変更してから解析実行。

問題は(2)のデータコピースループットだけど10MB/sも出れば実用的に使えるのでこれで試してみるか。あと良く考えたら入力データを圧縮すれば、データ転送時間は1/3には減らせるはずだし。(10:46追記)

...................................................................................................................................

〜2014/05/31


Home by T.Takasu