この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS事業本部 梶原@福岡オフィスです。
今日は7月7日で弊社のクラスメソッドの創立記念日となります。
今日はなな月なの日、N月Nano日ということで、NVIDIA Jetson NanoでAIを始めてみたいと思います。(強引・・・
とはいえ、普通にやってもつまんないので、Jetsonで紹介されている。Hello AI WorldをAnsibleで流してみました。
はっきり言いますが、普通の人は、下記公式サイトを参考に普通にjetson Nanoに乗り込んで実行したほうがいいと思います。
https://github.com/dusty-nv/jetson-inference#hello-ai-world-inference-only
では、サクサクと。
環境設定
jetson Nanoへの鍵配置
IPアドレスはコンソール等で確認をお願いします。 今回jetson Nanoの
- IPアドレスは
192.168.6.17
- ユーザ名は
jetson
でセットアップずみのjetson Nanoに対して実施していきます。
接続確認
$ ssh jetson@192.168.6.17
jetson@192.168.6.17's password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.9.140-tegra aarch64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
450 packages can be updated.
210 updates are security updates.
Last login: Sun Jul 7 00:29:45 2019 from 192.168.6.XX
jetson@jetson-nano:~$
鍵配置
接続用の鍵を配置します。
$ ssh-copy-id jetson@192.168.6.17
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/hoge/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
jetson@192.168.6.17's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'jetson@192.168.6.17'"
and check to make sure that only the key(s) you wanted were add
秘密鍵での接続確認
接続の際にパスワードを聞かれない事を確認してください
$ ssh 'jetson@192.168.6.17'
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.9.140-tegra aarch64)
<<省略>>
jetson@jetson-nano:~$
ssh_configを使用した接続確認
ssh_config ファイルを記載して、Ansibleで使用します。
Host jetson-nano
HostName 192.168.6.17 <<= Jetnon NanoのIPを入れてください
User jetson
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
IdentityFile ~/.ssh/id_rsa
$ ssh -F ssh_config jetson-nano
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.9.140-tegra aarch64)
<<省略>>
jetson@jetson-nano:~$
ここまで、できれば、普通はjetson-nanoに乗り込んでHello AI Worldすればいいんですが、天邪鬼なのでPlyabookにまとめます・・・
Ansbile での接続設定
hosts設定
hosts
[jetson]
jetson-nano
ansible.cfg
[defaults]
inventory = hosts
[privilege_escalation]
become = True
[ssh_connection]
ssh_args = -F ssh_config -o ControlMaster=auto -o ControlPersist=15m
scp_if_ssh = True
Ansibleからの接続実施
$ export ANSIBLE_CONFIG=./ansible.cfg
$ ansible jetson -m ping
jetson-nano | SUCCESS => {
"changed": false,
"ping": "pong"
}
AnsibleでHello AI Worldを実行
基本的にはビルド部分は下記URLの内容のAnsible-Playbook起こし。
推論部分はほぼシェルです・・・
https://github.com/dusty-nv/jetson-inference/blob/master/docs/building-repo-2.md
Playbookの概要
- jetson-inferenceで必要なパッケージをインストール
- jetson-inference をclone
- jetson-inference をbuild,install
- オレンジの画像を推論
- 推論結果を取得
をやっています。 Ansible Playbookはこちら
Ansible-Playbookの実行
$ ansible-playbook jetson-hello-ai-world.yml --ask-become-pass
SUDO password: jetsonユーザーでsudoする際のパスワード
PLAY [jetson] ****************************
TASK [Gathering Facts] ******************************************
ok: [jetson-nano]
TASK [apt] *********************
ok: [jetson-nano]
TASK [Only run "update_cache=yes" if the last one is more than 1Day ago] **************************************************************
ok: [jetson-nano]
TASK [Install a list of packages] *************************
ok: [jetson-nano]
TASK [create jetson-inference] **************************
ok: [jetson-nano]
TASK [git clone https://github.com/dusty-nv/jetson-inference.git] *********************
ok: [jetson-nano]
TASK [create build] ****************************
ok: [jetson-nano]
TASK [Configuring with CMake] ****************************
changed: [jetson-nano]
TASK [make all] **********************************
changed: [jetson-nano]
TASK [make install] *********************************
changed: [jetson-nano]
TASK [imagenet-console] **********************************
changed: [jetson-nano]
TASK [fetch] *************************************
ok: [jetson-nano]
PLAY RECAP *************************
jetson-nano : ok=12 changed=4 unreachable=0 failed=0
上記の結果は、何回実施した後の結果なので、changeがでていませんが、途中の環境構築にに15分くらいかかります。
ただ、推論自体は、数秒で実施できます。nanoでもかなり速いですね。
もしタイムアウトした場合は、再実施してください。
うまくいくと、実行したフォルダにjetson-nano上で推論したファイルが保存されています(output_0.jpg)
97%くらい、オレンジだと推論できました。(個人的にはみかんが好きです)
まとめ
勢いでやっちゃったので、Ansibleの冪等性をあまり考えてなく、ほぼシェルじゃんで大変申し訳ないですが、AnsibleのPlaybookを実行して、jetson-nano上でに推論して、推論した結果を取得することができました。
Hello AI Worldというのも、Nanoするのも初めはHello Worldでしょってことで、創業記念でいい感じに整いそうなのでここらへんで
Ansible PlayBook
# jetson-hello-ai-world.yml
- hosts: "jetson"
vars:
git_repo: "https://github.com/dusty-nv/jetson-inference.git"
work_dir: "jetson-inference"
tasks:
# 構築環境整備
- apt:
name: python-pip
become: yes
- name: Only run "update_cache=yes" if the last one is more than 1Day ago
apt:
update_cache: yes
cache_valid_time: 86400
- name: Install a list of packages
apt:
name: "{{ packages }}"
vars:
packages:
- git
- cmake
become: yes
# jetson-inferenceのクローン
- name: create {{ work_dir }}
file:
path: "{{ work_dir }}"
state: directory
- name: git clone {{ git_repo }}
git:
repo: "{{ git_repo }}"
dest: "{{ work_dir }}"
clone: yes
# jetson-inferenceのbuild,install
- name: create build
file:
path: "{{ work_dir }}/build"
state: directory
- name: Configuring with CMake
command: "cmake ../"
args:
chdir: "{{ work_dir }}/build"
become: yes
- name: make all
make:
chdir: "{{ work_dir }}/build"
target: all
become: yes
# Run `install` target as root
- name: make install
make:
chdir: "{{ work_dir }}/build"
target: install
become: yes
# オレンジの画像を推論
- name: imagenet-console
shell: ./imagenet-console orange_0.jpg ~/output_0.jpg
args:
chdir: "{{ work_dir }}/build/aarch64/bin"
# 結果画像の取得
- name:
fetch:
src: "~/output_0.jpg"
dest: "./output_0.jpg"
flat: yes