一ヶ月以上前の1月末、ヤフオクにZ820が出店されていたので、思わず購入した。

スペックは、Xeon E5-2643 3.30GHz、メモリ24GB、HDD300GB×2、Quadro4000。

 

現在持っているGeForce GTX TITANがKepler世代のもので、もう少し新しい世代のGPUが欲しいと以前から思っていた。ちょうど1月の中頃、ヤフオクでMSI GeForce GTX 1080 GAMING X 8Gグラフィクボード見つけ、定価の約1/3で購入。

ところが、このグラフィックボードの背が高く、それまでのZ620に実装すると、側面板が閉まらない。もう少し大きなワークステーションを探していたところに、このZ820を見つけたという経緯。

 

このところ少し時間があったので、Ubuntu 18.04をインストールしたので、以下に紹介する。

 

(1)グラフィックボードについて

・購入時に実装されていたグラフィックボードは、Quadro 4000という、Fermi世代のもの。NVIDIAのページで確認すると、このグラフィックボードに合うドライバーのバージョンは、nvidia-driver-390のようだ。

・2枚めのグラフィックボードとして、GTX 1080は、最新のnvidia-driver-440まで対応。

・デバイス番号が違うので、それぞれ別のバージョンのドライバーをインストールできるような気もするが、そのやり方が分からないので、両方に合う(Quadro 4000に合わせて)nvidia-driver-390をインストールする。

※実は、最新版のドライバーをインストールしたら、画面サイズが800×600になった。

 (ディスプレイはQuadro 4000と接続し、GTX 1080はディスプレイとの接続はなし、すなわちGPGPUとして使用)

 という背景で、ドライバーバージョンを決めた。

 

(2)USBメモリからUbuntu 18.04をインストール

・Ubuntu 18.04日本語のブート用USBメモリを全面のUSBの口に挿入。

・電源投入時に、F9を押下し、Boot MenuでUSBドライブを選び、インストール用のUbuntuを起動。

・Crucial MX500(2.5inch SSD)をHDDのドライブ0に装着して、そこにインストール。

・インストール時の注意点は、HHKB英字配置を使っているので、英語(US)キーボードを選択。

 

(3)インストール後にすること

・ホームディレクトリ配下のディレクトリ名を英語(ローマ字)表記。
$ LANG=C xdg-user-dirs-gtk-update
 

・emacsをインストール(メモ用に)
$ sudo apt install emacs25-nox
 

・入力ソースの優先順を変更
「設定」の「地域と言語」の入力ソースで、
 日本語(Mozc)の優先順を英語(US)の上にする。
 

・日本語入力(Mozcを利用)の設定。
「Mozcの設定」を検索し、「Mozcプロパティ」を開く
「キー設定の選択」の「編集」をクリックして、「Mozcキー設定」画面を開く。

 ここで、以下の4つのモード中の、「Ctrl Space」入力キーに対するコマンドを
 「Hankaku/Zenkaku」のそれと同じように設定する。
    -変換前入力中/変換中/直接入力/入力文字なし
 このとき、直接入力、入力文字なしのモードには、「Ctrl Space」がなかったので、
 「編集」のメニューから「エントリーの追加」を選んで、エントリーを追加した。
→ インストールメモが入力できるようになった。

・Chromeのインストール
FireFoxを開き、chromeを検索すると、「Chrome for Linuxをダウンロード」ページが
開き、64ビット.debが指定されているので、「同意してインストール」する。
 

・NASの利用

以前は、sambaをインストールし、smb.confを編集していたが、そのまま利用可能。

「ファイル」の「他の場所」、「サーバーへ接続」で、以下を入力。
smb://xxx.yyy.zzz.www ← NASの(固定)IPアドレス

 

(4)NVIDIAドライバー

・NVIDIA佐々木さんのこのページの終わりの方を参考にした。

$ sudo apt-get -y install cuda-drivers
※上記のcuda-driveersでは、最新のドライバーがインストールされる。
 2020.02.24時点では、nvidia-draiver-440がインストールされた。
 自分の環境では、既に述べたように、最新をインストールすると、画面サイズが600×800となる。
 それを避けるため、以下を実行する。
$ sudo apt-get install nvidia-driver-390
 

この後インストールしたDocker、Singularityについては、また別の記事に。

 

・今回購入したZ820と以前からのZ620(左側)。

 

・2枚のグラフィックボード。上側が元々実装されていたQuador 4000、下側が追加で実装したGTX 1080。

前回の記事で、オンプレ環境(Raspberry Pi、Ubuntu18.04の2つの環境)にSSMをインストールするまでをアップした。

 

この記事では、オンプレ環境にあるRaspberry Piにセッションで接続し、そこでWake on LANのコマンドを実行し、オンプレ環境の別のUbuntuサーバを起動するまでを記述する。

 

(1) Raspberry Piに接続

 ・AWSマネジメントコンソールにサインインし、SSMサービスを開く。

 ・セッションマネージャーを開く。

 ・Raspberry Pi用のインスタンスを選択し、「セッションの開始」ボタンを押下。

 

(2) セッション開始

 ・ブラウザの新しいタブが開いて、ターミナル風にセッションが開く。

 ・UbuntuサーバマシンをWake on LANで起動するようなシェルスクリプト(ここでは、wol.shを事前に準備)を起動する。

 

(3) オンプレ環境の別のサーバ(Ubuntuサーバ)が立ち上がる

 ・(1)と同じように、Ubuntu用のインスタンスを選び、「セッションの開始」をする。

  (画面は省略)

 ※ Ubuntuサーバも固定IPアドレス設定にして、(2)のシェルスクリプトのIPアドレスを固定的にしている。

 

以上にように、ssh不要で、オンプレ環境にセキュアに接続できるようになった。

Raspberry Piは消費電力も小さいので、常時起動させている。

Raspberry Piを踏み台に、Ubuntuサーバが起動できるようになったので、外出していてもUbuntuサーバを使えるようになった。

AWS Systems Manager(以下、SSM)については、こちらを参考に。

 

SSMを使うことで、sshを使わずに、AWSシステムコンソールからセキュアに接続できる。

このことは、今年のJAWS DAYS 2019大村さんのセッションで学んだ(スライドの19ページからの数ページ)。

 

(1) 今回のモチベーション(ゴール)

 自宅の環境のRaspberry Piを常時起動させ、SSMのセッションマネージャーからRaspberry Piに入って、そこからUbuntu 18.04の入っているワークステーション(HP Z620)の電源を入れて、改めてUbuntuに入る。と言うことができるようになる。

 

(2) アクティベーションの作成

 ・以下の(2)、(3)については、このページを参考にした。

 ・AWSマネジメントコンソールで、「Systems Manager」サービスを選ぶ。

 ・「インスタンスとノード」→「ハイブリッドアクティベーション」を選ぶ。

 ・アクティベーションの設定で、以下を設定。

   -アクティベーションの説明(適当に)

   -インスタンス制限(ディフォルトのまま)

   -アクティベーションの有効期限(限度の30日一杯)

   -ディフォルトのインスタンス名(適当に)

 ・「アクティベーションの作成」ボタンを押下。

 ・アクティベーション用のCode/IDが表示されるので、メモ(コピペ)する。

 

(3) SSMエージェントをインストール

 ・エージェントをダウンロード

  $ mkdir /tmp/ssm
  $ sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
  $ sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
 ・エージェントを一旦停止し、アクティベーションして、再度起動する。

  $ sudo service amazon-ssm-agent stop
  $ sudo amazon-ssm-agent -register -code "アクティベーションCode" -id "アクティベーションID" -region "ap-northeast-1"  

  ※東京リージョンの例:ap-northeast-1

  ※ファイルをフェッチする際にエラーとのメッセージは出たが、結果的には動作している。

  $ sudo service amazon-ssm-agent start

 

(4) マネージドインスタンス

 ・マネジメントコンソールで、SSMサービスの「マネージドインスタンス」を表示する。

 

この続きは、別記事で。

 

 

今後やりたいことを考えて、固定IPアドレスに設定した。

手順は、次の通り。

 

(1) /etc/dhcpcd.confの末尾に、以下を追記する。

 interface eth0
 static ip_address=192.zzz.yyy.xxx/24
 static routers=192.zzz.yyy.1
 static domain_name_servers=192.zzz.yyy.1

 ※ zzz,yyy,xxxは、各自のネットワーク環境に応じて設定する。

 

(2) 再起動すると、固定IPアドレスになっている。

 $ sudo reboot

 

もう、7年も前に書いたこの記事

この時は、Ubuntuマシン上(バージョンは忘れたけど)で、しおり(bookmark)を作成するツールのインストールと簡単な使い方を書いた。

 

今回は、手元でいつも使っているMBP上(ターミナルからコマンド起動)で動かすことにする。

 

(1)ダウンロード/格納

このダウンロードページからファイルをダウンロードする。

・解凍したフォルダ(jpdfbookmarks-2.5.2)を自分の「アプリケーション」フォルダ配下にコピー。

 例えば、/Users/akenji/Applications/jpdfbookmarks-2.5.2

 

(2)設定

・上記フォルダ内のlink_this_in_linux_path_cli.shを/usr/local/binにシンボリックリンク。

 例えば、次の通り。(権限でエラーが出たらsudoを付けて)

 $ cd /usr/local/bin

 $ ln -s /Users/kenji/Applications/jpdfbookmarks-2.5.2/link_this_in_linux_path_cli.sh jpdfbookmarks_cli

 

(3)実行

・次のようなコマンドラインでしおり付きのPDFファイルを得る。

 $ jpdfbookmarks_cli input.pdf -a bookmark.txt -o output.pdf

・上記のinput.pdfはしおりの無いPDFファイル。bookmark.txtがしおり作成ネタとなるテキストファイル。output.pdfがしおり付きのPDFファイル。

 

(4)実行結果

・ところが、MBPでは、次の通りのエラーとなる。

readlink: illegal option -- f

usage: readlink [-n] [file ...]

usage: dirname path

Unable to access jarfile /jpdfbookmarks.jar

・理由は、BSD系のOSであるMacOSのreadlinkはGnu版でない。-fオプションを持っていない。

 

(5)対処法

このページに対処法がある。最初に掲載されている長い方を使った。短い方だと自分の環境では、正常にパスが獲得できなかった。

・上記ページのシェルプロを/usr/local/binにreadlink_fという名前で格納、実行権を付与。

・併せて、(1)で格納した、link_this_in_linux_path_cli.shで「readlink -f」を「readlink_f」に変更。

 

(6)再び実行結果

・これで上手くしおりが作成出来るはずであったが、output.pdfで出来上がったファイルを開くとしおり(bookmark/目次)の文字列が文字化けしていた。

 

(7)解決策

・しおりファイルbookmark.txtのコード系など疑ったが、暫く原因は不明。何かヒントはないかと・・・

 $ jpdfbookmarks_cli --help

・すると、出力結果に、次のような行が。

-e,--encoding <UTF-8>       With this option you can read or write bookmarks

                             text file with the preferred encoding.

 

(8)最終実行結果

 $ pdfbookmarks_cli input.pdf -a bookmarks.txt -o output.pdf -e UTF-8

 

(9)その他

・Ubuntu 18.04でjpdfbookmarksをインストールしてもしおりの文字化けの現象は発生した。

 以前、-eオプション指定なしで上手く動いていたのは何故だか不明。

手帳とノートの電子化のため、買おうか迷っていたが、先月下旬注文、先月末に届いた、富士通の電子ペーパー・クアデルノ。

使い始めて約一週間、スケジュール管理とちょっとしたメモ、紙のノート(所謂大学ノート)代わりに活用中。
書き味にも慣れて来て、まずまず満足。
 
電子ペーパーの下にあるのが、macbook12用のスリーブケース。少し大きいけど、軽くて見た目もGoodなので購入。
 
ちょっと不満点はスケジュールが月曜始まりなこと。個人の好み・慣れ問題なので、きちんと2種類用意してもらいたいな!

NGC(NVIDIA GPU Cloud)にPGI CompilerのCommunity Editionのコンテナがあった。

NGCは、Pascal世代以降のGPUしかサポートしていない、と理解していたので、登録されているコンテナを使うことは諦めていた。

このPGI Compilerのコンテナは、Kepler世代以降とあったので、自分のGPU環境にも合致しているので、試しに使ってみる。

 

(1)NGCアカウントを取得する。

このログインページから新規アカウントを作成する。

・NVIDIAからのメールでログインする。
 パスワード入力が求められるので、パスワードを設定する。
・Generate API KeyでAPIキーを取得する。
 ログインして、CONFIGURATION → Setup → GeneratAPI Keyの[Get API Key]
・Setup > API Key画面の右肩の「Generate API Key」をクリックすると、

 API Key(英数字文字列が1行程度)が表示されるので、メモ(コピペ)しておく。

 

(2)ログインするためにAPI Keyを登録する。

・コピペしたAPI KeyをPasswordにして、次のUsernameでログインする。
 $ sudo docker login nvcr.io
 Username: $oauthtoken
 Password: (API Keyをペースト)
 ・・・(略)・・・
 Login Succeeded

 $

 

(3)PGI CompilerイメージのPull/起動

・ホストマシンのディレクトリ(/home/xxxx/workspace)をコンテナ内(/workspace)で使うため、-vオプションを使って次のように起動する。

 $ sudo docker run --runtime=nvidia  -it --rm -v /home/xxxx/workspace:/workspace nvcr.io/hpc/pgi-compilers:ce

 ・・・(略)・・・

 #

 

(4)PGI関連コマンドを使って、GPUの情報を表示する。

 pgaccelinfoコマンドの実行結果。

上記は、この記事で記述したように、GTX Titanを使うように-e NVIDIA_VISIBLE_DEVICES=0を指定して起動した結果。

 

※ 今回は、NGCに登録されているPGI CompilerのDockerイメージが自分の環境(Kepler世代GPUで)使えることまで検証。

※ Open ACCを使う(ディレクティブを入れる)のは、また別記事にて。

NAS(Rockdisk)を設置した時の記事

この記事の日時から、もうかれこれ7年も経過している。

ハードディスクが突然読めなくなっても、もはや寿命か?

 

壊れたハードディスクをZ620の3.5インチベイに搭載し、起動してみると、起動時にシーク音が数回してシステムが立ち上がるが、そのディスクは認識できない。

データを取り出すことは無理のようだ。

クラウド等に重要なデータは保管し直していたが、消失したデータもあり、ひどく残念。

 

Z620の1TBのハードディスクをRockdiskの筐体に収めて、接続すると正常に動作したので、Rockdiskの電子的な(ハードディスク以外の)部分については、特に壊れていないようだ。

 

これが壊れた2TBのハードディスク。

今から10ヶ月前、TensorFlowをimportするとIllegal Instructionが発生すると云う記事を書いた。

その理由は、プリ・ビルトされているTensorFlowがAVX instructionsを使用しており、古いCPUでは、Illegal Instructionとなる。

今回、Z620ワークステーションを買った理由の一つが、比較的新しいCPUを持った物に変更したかったから。

このZ620ワークステーションは、前の記事に書いた通り、元々実装されていたQuador K2000で画面表示し、追加で実装したGeForce GTX TITANには表示はさせていない。

 

(1)GPU版TensorFlowイメージを起動する

$ sudo docker run --runtime=nvidia -it tensorflow/tensorflow:latest-gpu bash

 

(2)本家ページのサンプルをコマンドラインから実行する

# python
Python 2.7.12 (default, Nov 12 2018, 14:36:49) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
※ Illegal Instruction も発生せずtensorflowがインポートできた。

>>> tf.enable_eager_execution()
>>> print(tf.reduce_sum(tf.random_normal([1000, 1000])))

※ この時、次のようなエラーとなった。

2019-05-05 00:50:57.479030: I tensorflow/compiler/xla/service/platform_util.cc:194] StreamExecutor cuda device (1) is of insufficient compute capability: 3.5 required, device is 3.0
2019-05-05 00:50:57.491674: I tensorflow/compiler/xla/service/service.cc:150] XLA service 0x3f995e0 executing computations on platform CUDA. Devices:
2019-05-05 00:50:57.491700: I tensorflow/compiler/xla/service/service.cc:158]   StreamExecutor device (0): GeForce GTX TITAN, Compute Capability 3.5
Traceback (most recent call last):
・・・

tensorflow.python.framework.errors_impl.InvalidArgumentError: Invalid device ordinal value (1). Valid range is [0, 0].
    while setting up XLA_GPU_JIT device number 1
>>> 

 

複数GPUが実装された環境では、tensorflowが管理するGPUリストと実際に使用するGPUとの対応が上手くいかないのかな?と勝手な想像。

 

(3)GPUを指定してDocker起動する

自分の環境では、GTX Titanがゼロ番のようなので、GTX Titanを使うように次のようにDockerを起動する。

$ sudo docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=0 -it tensorflow/tensorflow:latest-gpu bash

そこで、同様に次のようにコマンドラインからサンプルを試す。

# python

>>> import tensorflow as tf
>>> tf.enable_eager_execution()
>>> print(tf.reduce_sum(tf.random_normal([1000, 1000])))

・・・

tf.Tensor(-1604.2833, shape=(), dtype=float32)
>>> 

 

※ 環境変数、NVIDIA_VISIBLE_DEVICESに使用するGPUの番号を指定して、コンテナに渡す。

 

因みに、自分の環境でGPU番号を1として、Quadro K2000を指定すると、必要なcompute capabilityは、3.5以上であり、Quadro K2000は3.0なので、「no supported devices found for platform CUDA」とのメッセージでアボート(core dumped)した。

 

そのうち、このページのSolutions to common ML problemsにチャレンジしてみたい。

前々から欲しかった、Raspberry Piを遂に購入した。それは今から2ヶ月近く前の3月10日。

RSコンポーネンツから、Rspberry Pi3B+ Trial series, Basic Setを注文したのは、その夜。翌朝には、注文受付、出荷とのメール。翌日には納品。

改めて、RSコンポーネンツのページを調べてみると、このセットは今は売り出していなようだ。検索しても見つけられなかった。

Amazonなどで類似品と比較したところ、お買い得だったようだ。

 

開梱して、セットの構成物を並べたところ、開封の儀。

このセットの良いところは、電源、MicroSDカード、HDMIケーブルが付いていること。

・電源は、要求電源容量を満たす5V/3A。

・MicroSDカードは、NOOBSシステムプリインストール済。システムのダウンロード、SDカードへのコピー等不要、初心者向き。

・自分の環境では、ディスプレイがVGAアダプタなので、HDMIケーブルは使わず、HDMI/VGA変換アダプタを用意した。

組み立てる際に、ヒートシンクとケースの隙間との遊びが少なく、少し手間取ったが、問題なく組み立てた。

 

(1)システム立ち上げと簡単な設定。

先にも述べたとおり、MicroSDカード(16GB)には、既にNOOBSがインストール済なので、接続し電源を入れると直ぐに立ち上がった。

・Welcome to Raspberry Pi画面 → Next
・Set Country画面
  Country → Japanにすると、以下は適切に入る。
  Language
  Timezone
  ※ Use US keyboardにチェックを入れる。自分はUSキーボード派。
・Change Password(デフォルトのpiユーザの事前設定済みパスワードを変える)
・Seledt WiFi Network → Skip
 (家のWiFiは検出されていた。今回は有線LANで接続)
・Update Software
・Setup Complete → Reboot

再度、立ち上がると次のようなスクリーンに。

 

(2)外付けUSBディスク(HDD/SSD)をNASとして使う

・先ずは、MacBook ProでMBPで外付けUSBディスク(今回中身は80GBのSSD)を初期化(フォーマット)する。

・USBディスクをMBPに接続し、ディスクユーティリティを起動する。
 接続したディスクを選び、「消去」を実行。
  名前:RaspberryPi
  フォーマット:exFAT

  方式:GUIDパーティションマップ

  ※ 以前、Ubuntuの起動ディスクとして使っていたので、ブートに関する設定となっていたのを、GUIDパーティションマップを指定した。

・Raspberry PiでexFATフォーマットが使えるように、以下をインストール。
$ sudo apt-get install exfat-fuse exfat-utils


・Sambaをインストール。
$ sudo apt-get update
$ sudo apt-get install samba

・samba設定ファイルを編集。/etc/samba/smb.confファイルに追記。
[Pi]
    comment = Raspberry Pi 3B+
    path = /media/pi/RaspberryPi
    read only = no
    guest ok = yes
    force user = pi
    unix extensions = no
    workgroup = HOME
 

以上で、別のPCからこの外付けディスクにアクセス出来るようになった。

 

(3)Raspberry Piの設置環境 〜 イメージ

自宅の机のディスプレイの後ろに、次のようにRaspberry Piを設置している。

少しゴチャゴチャしているけど、このように設置している。今度結束バンドで少し整理しよう。

左側は、5ポート1Gbpsのハブ、バッファローのLSW4-GT-5EPL。

WiFiルーターのLANポートが足らなくなったので、今回どうしても必要となり。近くのヨドバシでゲット。とっても安かった。

右サイドに外付けディスクの上にRaspberry Piの透明ケース、その右上には赤のLEDの光が見える。(青のLEDが光っている黒っぽいケースが外付けディスク)

Raspberry PiからHDMI-VGA変換アダプタを経由して、KVMスイッチ(2台のPCでディスプレイとキーボードを共有するため)につながっている。Raspberry PiとZ620でディスプレイ、キーボード、マウスを共有している。

 

ケーブルがゴチャゴチャするのに、有線LANを何故使ったについては、次回に理由を説明する。