三日坊主のプログラミング日誌

なんか色々書いておくところ。

Hello, Jetson Nano

日頃の行いが良いせいか、それとも教授からの雑な扱いを不憫に思った神様が気を利かせてくれたのか、 日経Linuxの懸賞に当たり、NVIDIA Jetson Nanoを頂戴しました!!

さて、夏休みの自由研究として、このJetson Nanoで遊んでいきたいと思う。

Setup

基本的には、NVIDIA公式のサポートページ developer.nvidia.com

とQiitaの記事 qiita.com

を参考にしています。

Hardware

Jetson Nanoを動かす為には本体に加えいくつかの周辺機器が必要です。

今回使用した物は以下の通り。

これに加え当然インターネットに繋がったPCが必要です。

ACアダプターとジャンパーピンは秋月で買ってきた。人多かった。

Software

SDカードにNVIDIAがカスタムしたOSを書き込んでいきます。選択肢は2つ位あるんですが、HeadlessでやりたいのでJetCardを選びました。 github.com

ファイルサイズがかなりデカイので、DLと書き込みに時間がかかります。気長に待ちましょう。

Boot

書き込んだSDカードと電源、そしてUSB-microUSBをそれぞれ接続します。 USB-microUSBの片方はMacに接続します。

Jetson Nanoに電源を入れればmicro-USB近くのLEDが光ります。 それを確認すればあとはTerminalで ssh jetson@jetson.local を打てば接続可能です。

f:id:Hiro2201:20190810200645p:plain
Jetson Nano ssh

ちなみに、nvidia-smi は入っていませんが、CUDAはちゃんと動きます。

では早速、MNISTを動かしていきます。

PyTorchでMNIST

JetCardを使った方法では、PyTorch 1.1.0 や TensorFlow 1.13.1+nv19.5 がデフォルトで入っています。もちろんDocker 18.06.1-ceも入っています。(2019/08/10現在) ただ、Docker自体は runtime=nvidia が動作しない?

ソースコード

Vim も入ってるのでゴリゴリ書いてもいいのですが、せっかくなのでPyCharm ProfessionalのSSH リモートインタープリタで書いてみます。

f:id:Hiro2201:20190810205826p:plain
PyCharm Remote インタープリタ

コードは以下の通りです。

せっかく4コアCPUなので num_workers=4 にしてます。 コア数だけ見ると、MacBook Pro 13inch 2016年よりも多い...

処理時間

433.01 secなので大体7分。まあ、Batch size = 128 にしてるのでしょうがない気もするが。

f:id:Hiro2201:20190810212838p:plain
処理時間 433.01 sec

総評

Edge向け機器だけあってやっぱり(1080Tiとかに比べて)計算時間は遅かったが、 悪夢のNVIDIAドライバーガチャをしなくても簡単に利用可能なイメージを配布してくれるのは本当ありがたい。

まあ、クラウドで学習して、ONNXにして、TensorRT使って高速化が基本なのかなぁと。

色々遊んでみようと思う。


氷菓 面白かった。合掌 www.netflix.com

あと、高木さん2最高。 www.netflix.com

Swift for TensorFlowでMNIST -Fully Connected NN- (更新予定)

今回はS4TFでMNISTを解く。Convは次回予定。

前提 ディレクトリ構造は次のようになっているとする。

├── Resources
│   ├── t10k-images.idx3-ubyte
│   ├── t10k-labels.idx1-ubyte
│   ├── train-images.idx3-ubyte
│   └── train-labels.idx1-ubyte
├── main.swift
└── utils.swift

MNISTは公式のコードを参考にいくつかの変更を加えて書いています。

まず、 utils.swift 内のコードは公式が公開している該当コードと変わりありません。 変更点は、Swift for TensorFlow の Dataset API を一応利用している点です。

Swift for TensorFlow MNIST

工事中...

S4TFの基本のき

この前の続き。あとあと更新する予定

Tensorの宣言

PyTorch と S4TFのTensorの宣言を比較しながら見ていきます。

  • PyTorch
import torch
a = torch.tensor([1, 2, 3, 4, 5])
np_a = a.numpy()    # NumPy配列にする。
  • Swift for TensorFlow
import TensorFlow
import Python                     // PythonObjectを使う際は
PythonLibrary.useVersion(3, 6)    // これが必須みたい

var a: Tensor<Float> = Tensor<Float>([1, 2, 3, 4, 5])
// var a = Tensor<Float>([1, 2, 3, 4, 5])    // こっちでもOK
var np_a: PythonObject = a.makeNumpyArray()    // NumPy配列にする。

Swiftは静的型付け言語なので型宣言をします。なお、var で宣言した場合、変数、 letは定数です。

Tensorを宣言する際、Tensor<Float> 以外にも Tensor<Double>Tensor<Int32> 等が可能。

自動微分

Swift for TensorFlowで自動微分を行うには以下のような手段がある。

@differentiable(wrt: x)
func f(x: Float) -> Float {
    return x * x
}

let df = gradient(of: f)

print(f(x: 5.0))    // 25.0
print("関数f を微分した結果: \(df(5.0))")      // 10.0

さっき見たらなんか、TensorFlowの公式ページかっこよくなって、TF 2.0のチュートリアルもPyTorchのそれ見たく色々書いてあって良くなってる!

www.tensorflow.org

Swift for TensorFlowを触る

 すっごい久しぶりのブログ更新です。最近になって、Swift for TensorFlowのmacOS向けpre-builtパッケージが一応リリース扱いになったり、Colabで利用できるようになったり、今週予定されているTensorFlow Dev Summit 2019の初日のトリにSwift for TensorFlowが予定されていたりと最近開発が活発化してきているので、自称 日本で唯一Swift4TFを最初期から追っかけてきた人間 としては嬉しい限りです。

 この記事の目的は、Swift for TensorFlowを簡単に触れてみたり、自分がぶち当たった問題等をまとめておくことです。

Swift for TensorFlowとは

 GoogleがSwiftの始祖 Chris Lattner氏をとっ捕まえてきてAppleの Swift言語を拡張する形でTensorFlowを統合した新しいプログラミング言語

Swift for TensorFlow is a next-generation platform for machine learning, incorporating the latest research across: machine learning, compilers, differentiable programming, systems design, and beyond.

と宣言してるのかなり野心的なプロジェクト。

続きを読む

KerasとCartPoleでDQN (Deep Q-Network)

つりながら学ぶ!深層強化学習 PyTorchによる実践プログラミング 良い

 マイナビ出版からPyTorchを使って深層強化学習を作りながら学ぶという本が出てて、発売日にすぐ買って、今日もまだ読んでる途中なんだけれど、いかんせんディープラーニング関係はKerasと時々生TensorFlowぐらいしか弄ってないから、PyTorchが今ひとつ分からない。

 そこで勉強ついでに、ネットの記事を調べつつ、本のソースコードを元にDQNをKerasを使って実装するってのが今日のお話。

使うライブラリ

  • OpenAi Gym
  • TensorFlow 1.9.0
  • Keras (tf.keras)

まず前提として、DQNの実装で重要なのは以下の通り。

DQN で重要な4つのポイント

  • Experience Replay
  • Fixed Target Q-Network
  • Reward Clipping
  • Huber Loss

Huber Loss は TensorFlowの損失関数の中に実装されているのでそれを使うことにします。

続きを読む
プライバシーポリシー お問い合わせ