NVIDIA DIGITS 6.0をWindowsで使う!

はじめに

以前のブログにてDIGITS4.0をWindowsにインストールする手順を取り上げてから2年立ちましたが、ディープラーニングの普及は益々進み、 老若男女問わずこの技術の習得に関心が高まるこのごろですね。 そんな中、「プログラミングができなくてもディープラーニングできるよ!」という触れ込みでNVIDIA社さんがトレーニング(通称DLI)をオンラインや特別イベントなどでも主催し、少なからずAIに触ったという方は増えてきている様子ですが、 環境構築の面では未だまだ敷居が高いようです。 なにより厳しいのは一般企業の方は"Windows文化"ですよね。WindowsでのノンプラグラミングディープラーニングはSONYさんのNNablaもありますが、特にDLIを受講された方はDIGITSの方になれていると思いますので、内容を少しブラッシュアップしました。

DIGITSは5.0でも6.0でも良いですが、GANをやりたいときは6.0らしいっす。新しいのにしておきましょう。

環境

必須

Anaconda/MinicondaのPythonは2でも3でも良いですが、私自身はPython3.X (現時点では3.6)を普段はメインで使っており将来性の観点から3.Xの導入をおすすめします。

インストール時にAdd Anaconda to my PATH environment variableを有効にしてください.

推奨

これからインストールするもの

CaffeはNVIDIAがお手入れしている通称NVCaffeが一番良いのですが、WindowsでCaffeビルドするのが少し骨だと思いますので、Prebuild版で済ませます。

PowerShellの準備

以降、コマンドプロンプトかPowerShellを使います。PowerShellを前提に書いていくので、こちらを使う場合、機能制限を取っ払ってくださいね。

WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する:Tech TIPS - @IT

Microsoft Visual C++ Compiler for Python 2.7

python 2.7で使うコンパイラの入手とインストールをしておきます

こちらから入手http://aka.ms/vcpython27

Caffeの導入

別途用意したNVCaffeを使います。GPU版かCPU only版かはご自分の環境に合わせてどちらか一つを選択。Chachay/caffe: Caffe: a fast open framework for deep learning.

ダウンロードが終わったら、C:\CaffeやD:\CaffeなどにZipを展開します。好きなところで良いですがPathにスペース(" ")が含まれないほうが楽でしょう。展開後は下記のような構成になっているはず。あとでPATHを使いますので覚えといて。

C:\CAFFE
├─bin
├─include
├─lib
├─python
└─share

Graphvizのインストール

condaのパッケージにありましたね。

conda install graphviz
dot -V

dot -Vが通らなければ、anacondaインストール時に環境変数を設定してなかったことが原因だと思いますので、直してください

生でインストールする場合はこちら

Graphviz - Windows Packagesからダウンロードしてきて、インストール。インストール先を環境変数PATHにbinフォルダを追加します。 こちらのページが詳しいです。

Graphvizインストール手順

DIGITSのクローン

DIGITSを置きたいフォルダでPowerShellを開きます。フォルダのところでShift押しながら右クリックして「PowerShellウィンドウをここで開く」

git clone -b digits-6.0 https://github.com/NVIDIA/DIGITS.git
# DIGITS 5.0を使いたいときは
# git clone -b digits-5.0 https://github.com/NVIDIA/DIGITS.git

zipで落とすならこちら

Python2.7 仮想環境の構築

便利ファイルのダウンロード

以下のレポジトリからrequirements_conda.txt, requirements_pip.txtを入手してください。私のAnaconda環境が悪いのかconda create --file env.ymlがうまく動かなかったので、 マニュアルな方法を案内いたしますが、env.yml読めそうな人は同梱のymlで試してみてください。

Chachay/DIGITS_Windows_Packages

パッケージ類のインストール

DIGITSのオリジナルで付属しているrequirements.txtは、Windowsでは動作が怪しいパッケージだったり、 BVLC版Prebuild Caffeとの相性だったりが悪いので手直ししたものを使います。

もしcondaをpowershellに対応させてなかったら初期化を実行し、一旦閉じます。

conda init powershell

powershellを開き直して続きをします。

git clone https://github.com/Chachay/DIGITS_Windows_Packages
cd DIGITS_Windows_Packages
conda create -n DIGITS python=2.7
conda activate DIGITS
conda install -c free --file requirements_conda.txt --yes
pip install -r requirements_pip.txt

scikit-fmmが謎の問題をconda上で起こしますので、手直しします。参考:wheel files not working on Conda with Windows · Issue #27 · scikit-fmm/scikit-fmm

pip uninstall scikit-fmm
pip install --no-binary :all: scikit-fmm
cd ..

さらにGPUを利用する場合はCUDA10.1ツールキットを入れます。

conda install cudatoolkit=10.1.168

仮想環境の環境変数設定

CaffeのバイナリとPyCaffeへのPathを通します

$tmpPythonPath = (gcm python).Definition
$tmpPythonPath = $tmpPythonPath.Substring(0, $tmpPythonPath.Length - 10)
pushd $tmpPythonPath # 仮想環境のルートフォルダまで移動
mkdir .\etc\conda\activate.d
mkdir .\etc\conda\deactivate.d
New-Item -type File .\etc\conda\activate.d\env_vars.ps1
New-Item -type File .\etc\conda\deactivate.d\env_vars.ps1

で、両方のフォルダのenv_vars.batを編集します。

activateの方. Caffeの置き場は覚えていますね?

ファイルを開きます。vimなどを持っていれば、そちらを使って下さい。

notepad .\etc\conda\activate.d\env_vars.ps1

env_vars.ps1のファイルの中身はこちらの通り。

$env:PYTHONPATH="C:\caffe\python;" + $env:PYTHONPATH
$env:OLDPATH=$env:PATH
$env:PATH=$env:ProgramFiles + "\NVIDIA Corporation\NVSMI;" + $env:PATH + ";C:\caffe\bin"

deactivateの方も同様に。似てますけど…

# set PYTHONPATH=%PYTHONPATH:C:\caffe\python:=%
$env:PATH=$env:OLDPATH
$env:OLDPATH=

DIGITS起動

新しくPowerShellを開き直し、git cloneした中に入ってください。

cd digits
ls # .githubに続いてdigitsフォルダが見えるはず…
# digitsの学習結果等保存するフォルダ
mkdir c:\digits\jobs
# DIGITSのために作ったpython仮想環境の有効化
conda activate DIGITS
$env:DIGITS_JOBS_DIR=c:\digits\jobs
# digits起動
python -m digits

ブラウザでhttp://localhost:5000/へアクセスするとDIGITSのホーム画面に。

注意事項

本家BVLCのWindowsブランチが賞味期限切れとなり、プリビルドのバイナリを入手できなくなっています。

今後入手が難しいことが出てきたらBVLC/caffe at windowsの説明の通り本家版Windowsブランチを自分でビルドするか、NVCaffe 0.15をWindowsでビルド(GPU対応) - Qiitaを参照してください。

参考

NVIDIA DEEP LEARNING INSTITUTE TRAINING CATALOG
DLIのコースカタログです。入門者向けはDIGITSを利用したものが多めです。
User Guide — virtualenv 16.0.0 documentation
PowerShellのスクリプト実行ポリシーについて
Managing environments — Conda documentation
activate時にスクリプトを実行する方法

イノベーション経営ブームと現代の古典「イノベーションのジレンマ」について

「イノベーションのジレンマ」

技術系の企業では、経営者から新米技術者まで部署をまたいで親しまれる名著。

毎日まじめに正しく働いているのに気がついたら自分の働いている会社が新興企業の勢いを目の前に力を失ってしまうという怪談めいた話に背筋を凍らせ、時には、夏休みの怪談・恐怖体験披露のように、会議で話題になり、ひんやりとした気持ちになるも日常に戻るとすっかり忘れられてしまう存在です。

ところが、テスラ、UberやAirbnbの成功で、日本経済を支えているとも言える自動車分野が脅かされ始めた(と感じらる)昨今、日本政府をはじめ尻に火がついたようにコネクテッド・インダストリーズやインダストリー4.0を掲げて政策を手探りしはじめ、 日本企業も「オープンイノベーション」が答えとばかりにシリコンバレー周りに熱を出している様子も報道されています。

これは、日本企業だけでなく、ダイナミックさで知られる米国企業でも同じようで、経営管理的なマネジメントでガチガチに固めたポートフォリオ経営の企業でも

と、経営をコンパクトに回せるように肉体改造し、「破壊的イノベーション」の創出にも手を出し始めています。

破壊的イノベーションの5原則

集合・位相・圏 数学の言葉への最短コース
イノベーションのジレンマ
  • 作者: クレイトン・クリステンセン
  • 出版社/メーカー: 翔泳社
  • 発売日: 2001/7/1

本書を読み直してみると、破壊的イノベーションを起こすための処方箋として示唆が多く、デザインシンキングからオープンイノベーションまで、同じエコシステムの中で育まれていることが強く意識されます。

  1. 破壊的イノベーション技術の商品化は顧客担当部門に推進権限を与える

    権限の与え方として、下記が挙げられていますが、「新しいもの」は説得が難しいため「組織の分離」が推奨されています。

    1. 会社を説得する
    2. 組織を独立させる
  2. マーケットのサイズに合わせた小さな組織でオペレーションする
  3. 試行錯誤を前提に「調査・計画・実行」にとらわれない動きで新しいマーケットを見つける
  4. 新規事業部門は既存部門を利用しつつ評価指標を切り離す
    • 利用する:リソース類(資金や人、技術)
    • 切り離す:コスト管理、業績評価基準
  5. 新しいマーケットを探すこと

    新しい技術について、"ありのままを評価"してくれる市場を見つけることに力を入れ、既存事業"にも"受け入れられるための技術的ブレークスルーを夢見た磨きをかけないこと。

この本が書かれたのは、もう20年近く前になる2001年です。現在では、本質的な価値はそのままに、どうやって、この"処方箋"を実行に移していくかに磨きがかけられて来ているように思います。

トヨタがTRIをシリコンバレーに設置したり、AI部門を独立で立ち上げたり、「オープンイノベーション提携」を発表するなかで、なかには処方箋をはみ出した内容も見かけます。 本書の処方箋は必要条件ではありませんが、今後10年でどの施策が効果的だったのか見えてくるのではないでしょうか。

終わりに

本当は下記の関係を整理しようと思って書き始めましたが、おさらいのために読んだ「イノベーションのジレンマ」の偉大さに感じ入るところになりました。舶来もののビジネス書は概念が色々つながってて、一世一代ものの和書とは層の厚みが違うなと感じます。

以下は全て同じ文化圏で一枚岩でつながっています。

  • デザインシンキング
  • リーンスタートアップ
  • Business Model Canvas
  • Value Proposition Design
  • リーン顧客
  • デジタルトランスフォーメーション
  • オープンイノベーション
  • デジタルツイン
  • ビジネスサイクル
  • 組織のフラット化
  • Teal組織

Proxy環境下でUbuntu 16.04LTS日本語版デスクトップ環境を構築

前提環境

Linux系環境が手に入れられました。ハードウェアが準備できて、環境の準備です。

環境準備用PC

  • OS: Windows系
  • インストーラ作成用USBメモリ: 2GB
  • Proxy環境の中にいる

Linux環境構築ハードウェア

  • 詳細はもにょもにょ
  • NVIDIA Titan Xp搭載
  • インストール時はネットワークつながない

UbuntuのインストールUSB作成

ISOイメージの入手

Ubuntu 16.04LTS日本語版を選びました。Ubuntu 16.04 LTS 日本語からダウンロードして、インストールUSBを作ります。

インストールUSBの作成

USBスティックは2GBあれば十分です。Keledgebさんに手順が詳しく書いてあります。

Rufus その1 - WindowsでライブUSBメモリーを作成するアプリ・UbuntuのライブUSBメモリーを作成する - kledgeb

注意点

イメージモードは、ISOモードではなく、DDモードを。

RufusがSyslinux 6.03/20151222の入手に使っているリンクが死んでいたり(そもそもhttpで危ない?)、なんとかしたところでgithubでissueがでてたり、今ひとつ信用できません。 DDモードを使いましょう

OSインストール作業

いろんなインストール方法がありますが、解説はスキップ。エッセンスだけ。

  1. インストール言語:日本語を選択
  2. Ubuntuのインストール準備
    • Ubuntuのインストール中にアップデートをダウンロードする

      → インストール時ネットワークにつなげていないので実施しませんでした

    • グラフィックス、Wi-Fi機器、Flash、MP3やその他のメディアに必要なサードパーティーソフトウェアをインストールする

      → チェックした

  3. インストールの種類
    • ディスクを削除してUbuntuをインストール
    • 新しいUbuntuのインストールにLVMを使用する

あとは適当に。

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

起動して最初に日本語フォルダを廃絶します。Ctrl+Alt+Tを押してターミナルを起動。下記コマンドでフォルダ名を英語名に書き換えて再起動。

LANG=C xdg-usesr-dirs-gtk-update
reboot

参考:Ubuntuでホームディレクトリの中身を英語にする - Qiita

Proxyの設定

システム設定からプロキシ設定しておきます。

Ubuntu プロキシ設定方法(インターネット) - Qiita

設定後LANケーブル接続。

ifconfig
ping www.google.co.jp

インターネッツにつながってたら、それなりの反応をするはず。

システムのアップデート

ネットワークに接続できるようになったところで、色々なパッケージのアップデート。

sudo apt update
sudo apt upgrade
reboot

セキュリティソフト(ウィルス対策ソフト)の導入

Proxy環境といえば学校や会社が定番ですが、セキュリティ規定で何らかのウィルス対策ソフトを入れないとならない方は多いでしょう。軽く探してみましたが、以下2つの記事が詳しそうです。 しかし、Linux機は、セキュリティソフトいらないと断言している方は、なんなんだろうな。

主に個人利用のウィルス対策ソフトの比較評価

こちらのページが鬼気迫る勢いでリストアップしていました

Linux用ウイルス対策ソフトまとめ

評価対象ソフト

  • ClamAV
  • ESET NOD32 for Linux Desktop
  • Avast
  • AVGli
  • Comodo
  • Avira
  • Bitdefender
  • Panda
  • F-PROT
  • Dr.Web

法人利用も含めたウィルス対策ソフトの紹介

ノートンさん競合ソフトも紹介していて良いんですか(ありがとうございます)

Linuxウイルス対策まとめ|予防策からセキュリティソフトまで

リスト掲載ソフト

  • Symantec Endpoint Protection(シマンテック)
  • ServerProtect for Linux(トレンドマイクロ)
  • McAfee Complete Endpoint Protection – Business(マカフィー)
  • エフセキュア Linux セキュリティ(エフセキュア)
  • Kaspersky Endpoint Security for Linux(カスペルスキー)

ESETのNOD32も法人対応ありますがリストからは抜けています。

NVIDIA製ドライバのインストール

デフォルトでは、Nouveauがドライバとして設定されていると思いますが、新しいNVIDIAのグラボですと、 対応している解像度が限定的だったり、 Ctrl+Alt+F1の仮想コンソールが上手く動作しなかったりすると思います。

GPGPUで計算量だけ必要な場合は、UEFIで設定してマザーボード・オンボードのGPUを使ったりしましょう。

詳しい手順は、探せばいろいろ

参考:

Docker環境の構築

で、最後にNVIDIA-Docker環境の構築です。

Dockerインストール

Installation (version 2.0) · NVIDIA/nvidia-docker Wiki · GitHub

Proxy設定(ホスト側)

Control Docker with systemd | Docker Documentation

sudo mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
sudo vi http-proxy.conf
sudo vi https-proxy.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl show --property=Environment docker

http-proxy.confの中身

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

https-proxy.confの中身

[Service]
Environment="HTTPS_PROXY=http://proxy.example.com:80/"

Proxy設定(Dockerの内側)

DNSの設定

HttpProxyの場合、ドメイン変換が必要なので内部ネットワーク向けのDNSを取得します。

nmcli dev show | grep DNS

ここで得られたDNSを/etc/docker/daemon.jsonに追記。

{
  "dns":["XXX.XXX.XXX.XXX"]
}

参考:Fix Docker's networking DNS config | Notes on development | Robin

Proxyの設定

~/.docker/config.jsonを変更する(なければ作成)

{
  "proxies":
  {
    "default":
    {
      "httpProxy": "http://proxy.example.com:80/",
      "noProxy": "localhost"
    }
  }
}

改めてdockerを再起動して終わり。

sudo systemctl restart docker

参考:Configure Docker to use a proxy server | Docker Documentation

たたかいはこれから

ということでがんばりましょう。