SlideShare a Scribd company logo
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation Copyright © Fixstars Corporation
Jetson活用セミナー
ROS2自律走行実現に向けて
自律移動ロボット用-自己位置推定のCUDA高速化
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
本日のアジェンダ
• フィックスターズ会社紹介
• 会社概要と各種サービス
• テクニカルセッション
• ros1_brigeを用いた搬送ロボットメカナムローバーのROS2対応
• 自己位置推定アルゴリズムamclの高速化(プロファイリング、CUDA化)
• Q&A
2
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
発表者紹介
• 山田真介 (Shinsuke Yamada)
• ディレクター
• 博士 (工学)
• 主に自動運転関係のプロジェクトマネジメントを担当
• 深層学習における量子化
• 車両運動制御プログラムの高速化
• 坂本浩平 (Kohei Sakamoto)
• シニアエンジニア
• プロトタイプ自律ロボットのアルゴリズム開発や CUDA 高速化、自動運転システム
の構築を担当
• 高速化に興味
• アルゴリズム/SIMD/CUDA/高速コード実装
3
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation Copyright © Fixstars Corporation
フィックスターズのご紹介
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation 5
フィックスターズは、コンピュータの性能を最大限に引き出し大量データの高速処理を実現する、
高速化のエキスパート集団です。
低レイヤ
ソフトウェア技術
アルゴリズム
実装力
各産業・研究
分野の知見
フィックスターズの強み
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
ソフトウェア高速化サービス概要
6
お客様のソースコードをご提供いただき、
ソフトウェアの最適化やアルゴリズムの改良を行い高速化したコードをお返しします。
当社 お客様
オリジナルソースコードのご提供
高速化したソースコード
コンサルティング 高速化 サポート
性能評価
ボトルネックの特定
アルゴリズムの改良・開発
ハードウェアへの最適化
レポート作成
レポートやコードへのQ&A
実製品への組込み支援
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation 7
ソフトウェア高速化サービス領域
大量データの高速処理がお客様の製品競争力の源泉となる、
様々な領域でソフトウェア開発・高速化サービスを提供しています。
・NAND型フラッシュメモリ向けファー
ムウェア開発
・次世代AIチップ向け開発環境基盤開発
Semiconductor
・デリバティブシステムの高速化
・HFT(アルゴリズムトレード)の高速化
Finance
・自動運転の高性能化、実用化
・次世代パーソナルモビリティの研究開発
Mobility
・ゲノム解析の高速化
・医用画像処理の高速化
・AI画像診断システムの研究開発
Life Science
・Smart Factory化支援
・マシンビジョンシステムの高速化
Industrial
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
Fixstars Autonomous Technologies
8
高速化技術のフィックスターズと豊田通商グループのネクスティ エレクトロニクスによる合弁会社
並列化・最適化・機械学習・コンピュータビジョン技術を駆使し、自動運転社会の実現を加速する
会社名: Fixstars Autonomous Technologies
設立:2018年2月1日
資本金:3,000万円
(株)フィックスターズ 66.6%
(株)ネクスティ エレクトロニクス 33.4%
所在地:東京都港区芝浦3-1-1
代表取締役会長 : 蜂須賀 利幸
代表取締役社長:羽田 哲
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
画像処理・アルゴリズム開発サービス
9
• お客様の課題
• 高度な画像処理、深層学習等のアルゴリズム開発を行える人材が社内に限られている
• 考案中のアルゴリズムで機能要件は満たせそうだが、ターゲット機器上で性能要件まで
クリアできるか不安
• 研究開発の成果が製品化にうまく結びつかない
• 弊社の支援内容
• 課題に応じたアルゴリズム調査
• 深層学習ネットワーク精度改善、推論高速化手法調査
• 論文調査、実装
https://www.cs.toronto.edu/~frossard/post/vgg16/
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
AI・深層学習関連サービス
10
• ディープラーニングの包括的開発技術
• ネットワーク設計からターゲットデバイスでの高速化のノウハウ
• 大規模システムからエッジコンピューティングまでの開発実績
ネットワーク設計
データの前処理、データ拡張
精度改善
分散処理による学習高速化
各種DLフレームワーク
クラウド・サーバ エッジ
モデル圧縮
- 量子化
- 枝刈り
- 蒸留
ターゲットデバイスへの
ポーティング及び推論高速化
◼ Visconti, ARM, GPU, DSP
◼ SIMD,NEON,CUDA,TensorRT
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
GPU向け高速化サービス
11
• お客様の課題
• GPU 高速化の知見がない
• 自力で GPU に乗せてみたものの望む性能が出ない
• 弊社の支援内容
• GPU 高速化に関するコンサルティング
• ボトルネック調査、GPU プログラムの高速化
• CPU/GPU が混在するヘテロジニアス環境での最適化 10~150 倍の
高速化事例あり
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
AGV / AMR 開発における課題と当社サービス
12
量産機を見越して…
• 製造原価を抑えたい
• 組込み規模の限られた計算資源の中で
性能を出したい
• 複数台のロボットにも対応したい
後継機に向けて…
• 実製品向けの開発プラットフォームに
変更したい
• 計算資源はそのまま性能を落とさずに
機能追加したい
• 計算機資源の選定
• ロボット試作品の組み上げ
• ロボットの動作確認・評価
• ロボット開発プラットフォームの適用・移植
• アルゴリズム開発・改良
• 処理時間短縮・高速化
開発課題 当社サービス
本セミナーで紹介
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation Copyright © Fixstars Corporation
テクニカルセッション
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation Copyright © Fixstars Corporation
1. はじめに
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
1. はじめに
「ROS2上でナビゲーション処理を行う車両型ロボット開発環境を整備し、ROS2のナ
ビゲーション処理を高速化したい」という動機から、今回、以下のような取り組みを行
った。
• メカナムローバーのROS2対応
• ros1_bridgeによってROS1資産を活用しながらのROS2対応
• 自己位置推定パッケージamclのCUDA高速化
• ROS2ノードのプロファイリング(perf、NVIDIA Nsight Systems)
• amclのCUDA実装およびプロファイリング(nvprof、NVIDIA Visual Profiler)
15
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation Copyright © Fixstars Corporation
2. メカナムローバーの
ROS2対応
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2. メカナムローバーのROS2対応
アウトライン
• 2.1 メカナムローバーとは
• 2.2 メカナムローバーのROS対応状況
• 2.3 メカナムローバーのROS2対応
17
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.1 メカナムローバーとは
• ヴイストン株式会社が販売する4輪のメカナムホイールを搭載した全方位移動台車ロ
ボット[1]
• 可搬重量約40kg、最高速度1.3m/s
• 2021/11/1時点でROS1に対応
• 今回の一連の取り組みではメカナムローバーVer2.0を用いた
18
[1] https://www.vstone.co.jp/products/wheelrobot/ver2.0.html
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.1 メカナムローバーとは
• ハード構成は以下の通り(購入時オプションよって構成が異なる)。
19
PC
Arduino互換
CPUボード
モーター
ドライバ
2D LiDAR
DCモーター
エンコーダ
[2] https://www.hokuyo-aut.co.jp/search/single.php?serial=17
USB
USB
I2C
URG-04LX-UG01[2]
測距範囲:0.02~5.6m
走査角度:240°
メカナムローバー本体
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.1 メカナムローバーとは
• LiDARをVelodyne VLP-16に変更した
• Jetson AGX Xavierを用いた
20
PC
Arduino互換
CPUボード
モーター
ドライバ
3D LiDAR
DCモーター
エンコーダ
[3] https://velodynelidar.com/products/puck
Ethernet
USB
I2C
メカナムローバー本体
Velodyne VLP-16[3]
測距範囲:0.5~100m
水平FOV:360°
垂直FOV:30°(±15°)
✓ 測距範囲を広くし、広域のフィールドで
も自己位置推定を行いやすくしたい
✓ 今後、3D SLAM検討もできるようにしたい
Jetson AGX Xavier
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.2 メカナムローバーのROS対応状況
• 2021/11/1時点でROS1のみサポートされている
• 公式で動作検証されているナビゲーション時のROS1ノード構成は以下の通り。
21
amcl
urg_node
pub_odom
move_base
dwa_local_
planner
map
odom
rover_odo
rover_twist
map_server
scan
odom
amcl_pose 経路生成、走行制御
自己位置推定
地図配信
2D LiDAR
キャプチャ
オドメトリ
変換
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.2 メカナムローバーのROS対応状況
• 2021/11/1時点でROS1のみサポートされている
• 公式で動作検証されているナビゲーション時のROS1ノード構成は以下の通り。
22
amcl
urg_node
pub_odom
move_base
dwa_local_
planner
map
odom
rover_odo
rover_twist
map_server
scan
odom
amcl_pose
geometry_msgs/Twistから
nav_msgs/Odometryに変換
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.2 メカナムローバーのROS対応状況
• Velodyne VLP-16に変更したことで以下のようなノード構成となった
23
amcl
velodyne_driver
pub_odom
move_base
dwa_local_
planner
map
odom
rover_odo
rover_twist
map_server
odom
amcl_pose
velodyne_pointcloud
pointcloud_to_
laserscan
velodyne_packets
scan
points_raw
経路生成、走行制御
自己位置推定
地図配信
オドメトリ
変換
3D LiDARキャプチャ
3D点群、2Dスキャン変換
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.2 メカナムローバーのROS対応状況
• Velodyne VLP-16に変更したことで以下のようなノード構成となった
24
amcl
pub_odom
move_base
dwa_local_
planner
map
odom
rover_odo
map_server
odom
amcl_pose
velodyne_packets
scan
points_raw
velodyne_driver velodyne_pointcloud
pointcloud_to_
laserscan
rover_twist
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.2 メカナムローバーのROS対応状況
• 速度指令(rover_twistトピック)からモーター制御指令までの処理の流れ
25
PC
Arduino互換
CPUボード
モーター
ドライバ
DCモーター
エンコーダ
① rover_twistトピックを配信
②(ROS1の) rover_twistトピックを
購読し、モータードライバを介して
制御指令を出す
※Arduinoのスケッチ実装
rover_twist
③モーターを回転させる
メカナムローバー本体
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.2 メカナムローバーのROS対応状況
• エンコーダ情報からオドメトリ(rover_odoトピック)を算出する処理の流れ
26
PC
Arduino互換
CPUボード
モーター
ドライバ
DCモーター
エンコーダ
③rover_odoトピックを購読
④pub_odomノードでodomトピックに変換
②モータードライバ経由で得られる
モーター回転数からオドメトリを計算し、
(ROS1の)rover_odoトピックを配信
※Arduinoのスケッチ実装
rover_odo
①モーター回転数を取得
メカナムローバー本体
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
• 今回、以下のような方針でROS2対応を行った
• メカナムローバーのROS2対応のファーストステップとして「amclを用いた自己位
置推定まで」を行う(=ナビゲーションまではやらない)
• ros1_bridge[4]を用いることで既存のROS1資産を使いつつ、センサ関連や自己位
置推定処理をROS2化する
• 自己位置推定に関連する主な処理をROS2 Galactic上で動作させる
• Galacticより前のROS2ディストリビューションでは使いたい機能が使えないことが
多かったため
27
[4] https://github.com/ros2/ros1_bridge
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
• 各ノードが動作するROS1、ROS2ディストリビューション
• A:ROS1 Noetic、B:ROS2 Foxy、C:ROS2 Galactic
28
amcl
velodyne_driver
pub_odom
map
odom
rover_odo
map_server
odom
amcl_pose
velodyne_pointcloud
pointcloud_to_
laserscan
scan
ros1_bridge initial_pose rviz2
velodyne_packets points_raw
メカナムローバー内蔵のArduinoスケッチ実装
はROS1のままで動かす
A C
B
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
• 各ノードが動作するROS1、ROS2ディストリビューション
• A:ROS1 Noetic、B:ROS2 Foxy、C:ROS2 Galactic
29
amcl
velodyne_driver
pub_odom
map
odom
rover_odo
map_server
odom
amcl_pose
velodyne_pointcloud
pointcloud_to_
laserscan
scan
ros1_bridge initial_pose rviz2
velodyne_packets points_raw
Velodye関連のROS2パッケージはROS2
Foxy対応済なのでFoxyで動かす
A C
B
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
• 各ノードが動作するROS1、ROS2ディストリビューション
• A:ROS1 Noetic、B:ROS2 Foxy、C:ROS2 Galactic
30
amcl
velodyne_driver
pub_odom
map
odom
rover_odo
map_server
odom
amcl_pose
velodyne_pointcloud
pointcloud_to_
laserscan
scan
ros1_bridge initial_pose rviz2
velodyne_packets points_raw
ROS1、ROS2間の通信の相互変換
自己位置推定関連は
ROS2 Galiacticで動かす
A C
B
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
• 各ノードが動作するコンピュータ
• A:Jetson AGX Xavier、B:ノートPC(Intel CPU)
31
amcl
velodyne_driver
pub_odom
map
odom
rover_odo
map_server
odom
amcl_pose
velodyne_pointcloud
pointcloud_to_
laserscan
scan
ros1_bridge initial_pose rviz2
velodyne_packets points_raw
Jetson AGX Xavier
可視化用ノートPC
A
B
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
• 各ノードが動作するコンピュータ
• A:Jetson AGX Xavier、B:ノートPC(Intel CPU)
32
amcl
velodyne_driver
pub_odom
map
odom
rover_odo
map_server
odom
amcl_pose
velodyne_pointcloud
pointcloud_to_
laserscan
scan
ros1_bridge initial_pose rviz2
velodyne_packets points_raw
rviz2による可視化及び
初期位置指定を行うため
に別PCを用意
可視化用ノートPC
A
B
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
• 複数ディストリビューションがあるためDockerコンテナ化した
• A:ROS1 Noetic、B:ROS2 Foxy、C:ROS2 Galactic、D:ROS2 Galactic(CUDA)
33
amcl
velodyne_driver
pub_odom
map
odom
rover_odo
map_server
odom
amcl_pose
velodyne_pointcloud
pointcloud_to_
laserscan
scan
ros1_bridge initial_pose rviz2
velodyne_packets points_raw
A C
B
D
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
このDocker環境を構築するにあたり、以下のようなハマりポイントがあった
• 扱うDockerコンテナが多いため手順が煩雑
• 背景:様々なROS1、ROS2ディストリビューションが混在するため
• 対応:docker-composeを使うことで簡単に起動できるようした
• Jetson AGX Xavier、ノートPC間でROS2の通信ができない
• 課題
• 今回のハードウェア構成では、有線LAN、Wi-Fiといった複数のNICを同時に使用す
るが、 CycloneDDS側で複数NICを適切にハンドリングしてくれない
• 対応
• CycloneDDS設定で明示的にNICを設定することで対応[5]
34
[5] http://www.robotandchisel.com/2020/08/12/cyclonedds/
export CYCLONEDDS_URI="<CycloneDDS><Domain><General><NetworkInterfaceAddress>wlan0</NetworkInterfaceAddress></General></Domain></CycloneDDS>"
設定例(wlan0となっている箇所はネットワークインターフェース名)
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
Jetson AGX Xavier上で動作するCUDA、ROS2 Galactic環境構築
• 課題
• ROS2公式のDockerイメージ (ros:galactic)[6]だとROS2 Galacticは使えるが、
CUDAを使えない
• NGC(NVIDIA GPU CLOUD)配布のDockerイメージ(nvcr.io/nvidia/l4t-base)[7]
だとCUDAは使えるが、Ubuntu 18.04ベースであるため、ROS2 Galacticをソースコ
ードから入れる必要あり[8]
35
[6] https://hub.docker.com/_/ros
[7] https://ngc.nvidia.com/catalog/containers/nvidia:l4t-base
[8] https://docs.ros.org/en/galactic/Installation/Ubuntu-Development-Setup.html
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.3 メカナムローバーのROS2対応
Jetson AGX Xavier上で動作するCUDA、ROS2 Galactic環境構築
• 今回の対応
• NGC配布Dockerイメージ(nvcr.io/nvidia/l4t-base)をベースにROS2 Galacticを
インストールしたDockerイメージ(dustynv/ros:galactic-ros-base-l4t-r32.6.1)
[9]を活用
• amclおよび依存ROS2パッケージをソースコードからビルド
• ROS2 Galacticをソースコードからインストールしている都合上、aptでROS2
Galacticパッケージのインストールができないため
36
[9] https://github.com/dusty-nv/jetson-containers
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
2.4 実機デモ
37
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation Copyright © Fixstars Corporation
3. amclパッケージの
CUDA高速化
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3. amclパッケージのCUDA高速化
アウトライン
• 3.1 背景
• 3.2 amcl とは
• 3.3 amcl のプロファイリング
• 3.4 amcl の CUDA 化による高速化
39
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.1 背景
• ナビゲーション処理に関わるROS2パッケージをCUDA実装することで、処理の高速
化およびCPU負荷低減を実現したい
• 以下の理由から今回はamclパッケージ(自己位置推定処理)[10]に着目した
• パーティクル毎に処理が独立しており、並列度が高く、GPUと相性がよい(amclの
アルゴリズム詳細は後述)
• GPUにオフロードできれば自己位置推定精度を改善するためにパーティクル数を増や
しやすい
• navigation2でもGPU、CPU高速化対象アルゴリズムの候補として挙がっている
• https://github.com/ros-planning/navigation2/issues/1391
• https://github.com/ros-planning/navigation2/issues/1781
• https://navigation.ros.org/2021summerOfCode/projects/multithreading.html
40
[10] https://github.com/ros-planning/navigation2/tree/galactic/nav2_amcl
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.2 amcl とは
• Adaptive Monte Carlo Localization
• 自己位置推定アルゴリズム
• 内界センサ、外界センサの情報からロボットの現在位置を推定する
• 特徴
• パーティクルフィルタをベースとしたアルゴリズム
• 位置姿勢の候補とその尤度をパーティクルで表現する
• パーティクルの散布範囲と数を動的に変更する
• 自己位置が不確かな場合大域的リセットを行う
41
赤い点群: パーティクル
外周の点群: LiDAR によるスキャン
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.2 amcl とは
• amcl のおおまかな処理の流れ
42
パーティクルの初期化
(初期の位置姿勢が取り得る範囲に
パーティクルをランダム散布)
予測
(ロボットの移動分を内界センサで取得し、
ノイズを混ぜてパーティクルを移動させる)
更新
(各パーティクルについて、外界センサ情報
との合致度に基づき尤度を更新)
推定
(各パーティクルの情報から
位置姿勢を一意に推定)
リサンプリング
(尤度の低いパーティクルを除去し、尤度の
大きいパーティクル付近にランダムに散布)
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3 amcl のプロファイリング
• プロファイリング
• 目的のプログラムを分析し、計算時間が大きい箇所を特定する
⇒ amcl の処理のうち、どこを高速化すべきか目星をつける
43
amcl
プロファイリング
amcl
〇〇[%] 〇〇[%]
〇〇[%]
〇〇[%]
〇〇[%]
重い処理
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3 amcl のプロファイリング
• 実際に amcl のプロファイリングを実施
• 説明内容
• 3.3.1 プロファイリングの実行環境
• 3.3.2 プロファイリング時のノード構成
• 3.3.3 プロファイリング方法
• 3.3.4 プロファイリング結果
44
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.1 プロファイリングの実行環境
• ハードウェア
• NVIDIA® Jetson AGX Xavier™
• CPU: ARMv8 Processor rev 0 (v8l)、64bit 8コア
• GPU: NVIDIA Volta™, CUDAコア512基
• RAM: 32GB
• 動作モード: 30W 8コア
• 動作周波数(Max) … CPU: 1.2GHz、GPU: 905 MHz
• ソフトウェア
• NVIDIA® JetPack SDK 4.6 (L4T 32.6.1) (*)
• OS: Ubuntu18.04
• CUDA: 10.2
• コンパイラ: gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)
45
(*) JetPack : Jetson用の開発キット.L4T 32.6.1を含む
L4T (NVIDIA® Jetson™ Linux Driver Package) : Jetson向けのサポートパッケージ
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.1 プロファイリングの実行環境
• ROS2の動作環境
• ROSディストリビューション : ROS2 Galactic
• 2021年11月現在の最新バージョン
• Dockerコンテナ内にROS2環境を構築
• Linux 18.04 (L4T 32.6.1) 上にROS2 Galacticをビルドしたコンテナ[11]を使用
46
Galactic Geochelone
リリース: 2021/5/23
[11] https://github.com/dusty-nv/jetson-containers
Jetson AGX Xavier
Linux 18.04 (L4T 32.6.1)
Docker コンテナ (L4T 32.6.1)
ROS2 Galactic
ハードウェア
ホストOS
ゲストOS
アプリケーション
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.2 プロファイリング時のノード構成
• 以下のノード構成でamclを実行
47
nav2_amcl
nav2_map_
server
nav2_lifecycle
_manager
rosbag2
ROS2 Galactic
各種センサ情報、
オドメトリ情報など
地図情報
ステート管理
amclの処理結果の再現性を確保するため、
rosbag2 で記録したデータを入力に使用する
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.3 プロファイリング方法
今回実施したプロファイリングの流れ
(1) amclノード (ROS2)のビルド・実行
(2) perf[12]、FlameGraph[13]を使用して分析
(3) 分析結果から計算負荷の高い関数を特定する
48
[12] perf … Linuxカーネルで使用可能な性能分析ツール
[13] FrameGraph … 性能解析結果を階層図で可視化できるツール
https://www.brendangregg.com/flamegraphs.html
amcl::funcA1_1 (…) {
……… ;
...... ;
……… ;
…………… ;
………… ;
}
⇒高速化の余地あり
ビルド
amcl
ノード
実行
amcl
ソースコード
実行
ファイル
ROS2 Galactic
FlameGraph
分析
perf
amcl::funcA1_1
amcl::funcA1
cpu utilization [%]
amcl::funcA funcB
amcl
A2 B2
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.3 プロファイリング方法
(1) amcl ノード (ROS2) のビルド・実行
• Dockerコンテナを起動する
• Dockerコンテナ内でのプロファイリングを有効にするため、
--privileded オプションを付与して起動する
• amclを含む ROS2パッケージをビルドする
• プロファイリングに必要な情報を実行ファイルに付与するため、以下のオプションを指定
-DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -funwind-tables -g3"
49
$ docker run --gpus all --rm -it –-privileged container:latest
$ colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release ¥
-DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -funwind-tables -g3"
ビルド
(colcon)
amcl
ノード
実行
amcl
ソースコード
実行
ファイル
ROS2 Galactic
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.3 プロファイリング方法
(1) amcl ノード (ROS2) のビルド・実行
• amclノードの実行方法について
• 後述のperfによる分析において分析対象を絞り込むため、amclノード単体で起動する
ビルドされたamclのバイナリを直接実行することで可能 (ros2 run や launch を使わない)
50
$ install/nav2_amcl/lib/nav2_amcl/amcl --ros-args [options]
ビルド
(colcon)
amcl
ノード
実行
amcl
ソースコード
実行
ファイル
ROS2 Galactic
ビルドされたamclノードのバイナリを
実行することでamclノードのみ起動できる
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.3 プロファイリング方法
(2) perf、FlameGraphを使用して分析
実行手順
1. Dockerコンテナにperfをインストール
2. perfによる分析を有効にする
3. perfの引数にamclの実行コマンドを指定して実行
perf record –g: perf によるデータ採取コマンド (-g: 関数の階層構造を読み取る)
51
$ apt-get install linux-tools-generic
$ /usr/lib/linux-tools-4.15.0-161/perf record –g ¥
install/nav2_amcl/lib/nav2_amcl/amcl --ros-args [options]
sudo sysctl -w kernel.perf_event_paranoid=-1
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.3 プロファイリング方法
(2) perf、FlameGraphを使用して分析
実行手順
4. FlameGraphのスクリプト[14]を使用し、
perfの分析結果を可視化
52
$ perf script | ./stackcollapse-perf.pl ¥
| ./flamegraph.pl > output.svg
FrameGraph
[14] https://github.com/brendangregg/FlameGraph
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.3 プロファイリング方法
(3) 分析結果から計算負荷の高い関数を特定する
• FlameGraphから計算負荷が高い関数を特定する
• FlameGraphにより、関数構造と処理負荷の比率が分かる
• タイマの埋め込みにより処理時間を計測する
• FlameGraphで判明した処理負荷の大きい関数周辺に
タイマを埋め込み、具体的な処理時間を計測する
53
処理負荷
関数の呼び出し順序
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.4 プロファイリング結果
• FlameGraphから計算負荷が高い関数を特定する
• amclの主処理の中で、sensorFunction関数の計算負荷が最も高い
54
laserReceived関数 :
amclノードによる自己位置推定処理の本体となる関数
ロボットの動作中、VLP-16からのセンサ情報を繰り返し受け取り、処理し続ける
sensorFunction関数 :
amclノードによる自己位置推定処理の中で、
最も計算負荷が高い関数
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.3.4 プロファイリング結果
• タイマの埋め込みにより処理時間を計測する
55
laserReceived: 41.761 msec
getOdomPose: 0.083 msec
shouldUpdateFilter: 0.016 msec
odometryUpdate: 2.504 msec
updateFilter (≒ sensorFunction): 33.179 msec
pf_update_resample: 4.875 msec
publishParticleCloud: 0.472 msec
getMaxWeightHyp: 0.526 msec
publishAmclPose: 0.128 msec
calculateMaptoOdomTransform: 0.194 msec
sendMapToOdomTransform: 0.175 msec
odometryUpdate
6%
updateFilter
79%
pf_update_resample
12%
laserReceived関数処理時間内訳
getOdomPose
shouldUpdateFilter
odometryUpdate
updateFilter
pf_update_resample
publishParticleCloud
getMaxWeightHyp
publishAmclPose
calculateMaptoOdomTransform
sendMapToOdomTransform
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4 amclのCUDA化による高速化
アウトライン
• 3.4.1 NaiveなCUDA化処理の実装
• 3.4.2 CUDA実行モデル
• 3.4.2 CUDA化処理プロファイリング
• 3.4.3 CUDA化処理最適化
• 3.4.4 Jetson上における性能測定の留意点
56
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4 amclのCUDA化による高速化(sensorFunction CPU処理時間)
• CPU処理での処理時間を計測
• amclでは適応的にパーティクル
数を変化させる
• rosbagファイルを流して一連の
自己位置推定を行った時の
パーティクル数と処理時間の
関係を測定
• 結果
• 処理時間はパーティクル数に比例
• 最大パーティクル数で
約40msec
• LiDARの入力周期が10Hzなので
最大レイテンシが約半周期
57
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.1 NaiveなCUDA化処理の実装 – 検討
• sensorFunctionの処理
• 各パーティクルに対して LiDAR観測の尤度を求めて重みを更新する
• amclデフォルトではパーティクル数 (500-2000)、走査方向 (60) の計算が必要
• 計算はパーティクルで並列となる
58
各パーティクル処理
各走査方向に対する尤度の和を
観測の尤度とする
: 走査線
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.1 NaiveなCUDA化処理の実装 – 結果
• まずはCPU処理をそのままCUDA化
• CUDAの各スレッドで
各パーティクルを処理
• CUDAで必要なメモリ領域は
cudaMallocで確保
• CUDA処理前にデータを
cudaMallocで確保した領域にコピー
• 高速化の効果が見える
• パーティクル数、走査方向数を
増やして自己位置推定精度を
確保することが可能
• レイテンシが低くなる
• CPU負荷の削減
• 削減分を他処理にまわせる
59
cpu : CPU処理時の処理時間
gpu-naive : NaiveなCUDA実装の処理時間
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.2 CUDA実行モデル
60
Warp (32Threds)
…
Block (~1024Threds)
…
タスク
…
GPU
コア
レジスタ
キャッシュ
命令ユニット
SM
…
• CUDAの内部には複数のSMがある
• SM : Streaming Multiprocessor
• 独立して実行できるプロセッサー
• Jetson AGX Xavierでは20個
• カーネルの実行スレッドはBlockで区切
られる
• Block 内部は32スレッド単位のWarp
で区切られる
• Block単位でSMに割り当て
• 同じタスクが違うSMで処理される
• Warpごとに処理される
• Warpに所属する32スレッドが同時に
処理を行う
Block を割り当て、Warpごとに処理
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.3 CUDAプログラムのプロファイリング
• プロファイリング実行環境
61
Jetson AGX Xavier
ROS2 Galactic (Docker コンテナ)
デスクトップPC(Ubuntu 18.04)
プロファイリングツール
(Nsight Systems、nvvp)
SSH
分析データ
amcl ノードは
Docker コンテナ内で実行
amcl ノード
分析
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
amcl
ノード
ROS2 Galactic
3.4.3 CUDAプログラムのプロファイリング
• NVIDIA® Nsight™ Systems
• NVIDIA社製のプロファイリングツール
• プロファイリング結果をGUIで可視化
• GPU、CPUの処理どちらも分析可能
• GPUはCUDA API/カーネル実行時間をプロファイリング可能
62
Nsight Systems
(分析)
分析
Nsight Systems
(可視化)
デスクトップPC
Jetson AGX Xavier
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.3 CUDAプログラムのプロファイリング
• NVIDIA® Nsight™ Systems 実行手順
① Jetson上でDockerコンテナを起動
Nsight Systems プロファイリングで使う一時ディレクトリをマウント
② Dockerコンテナ上で環境変数を設定
③ Dockerコンテナ上で実行
④ デスクトップPC上で Nsight Systems を立ち上げ Jetson に SSH 接続し
docker 内で実行したプロセスを指定してプロファイリング
63
$ docker run --gpus all --rm -it --privileged --shm-size=1024m ¥
-v /opt/nvidia:/opt/nvidia -v /tmp/nvidia:/tmp/nvidia cuda-galactic:root
LD_PRELOAD=“/opt/nvidia/nsight_systems/libToolsInjectionProxy64.so” ¥
install/nav2_amcl/lib/nav2_amcl/amcl --ros-args [options]
export CUDA_INJECTION64_PATH="/opt/nvidia/nsight_systems/libToolsInjection64.so“
export QUADD_INJECTION_PROXY="OSRT, $QUADD_INJECTION_PROXY"
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
• NVIDIA Visual Profiler (nvvp)
• NVIDIA社製のプロファイリングツール
• CUDA カーネル内部のプロファイリング結果をGUIで可視化
• nvprof
• NVIDIA社製のプロファイリングツール
• プロファイリングのメトリクス取得
amcl
ノード
ROS2 Galactic
3.4.3 CUDAプログラムのプロファイリング
64
nvprof
分析
nvvp
Linux 18.04
デスクトップPC
Jetson AGX Xavier
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.3 CUDAプログラムのプロファイリング
• nvvp 実行手順
① Jetson上でDockerコンテナ起動
② Dockerコンテナ上でnvprof実行
③ 生成したプロファイル結果をscpコマンド等でデスクトップPCにコピー
④ デスクトップPCでnvvpを起動してプロファイリング結果を可視化
65
$ docker run --gpus all --rm -it --privileged --shm-size=1024m cuda-galactic:root
nvprof --analysis-metrics -o amcl_cuda.nvvp ¥
../install/nav2_amcl/lib/nav2_amcl/amcl --ros-args [params]
sudo /usr/local/cuda/bin/nvvp ¥
-vm /usr/lib/jvm/java-8-openjdk-amd64/bin/java amcl_cuda.nvvp
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.3 CUDA化処理プロファイリング
66
NVIDIA® Nsight™ Systems
メモリコピーの消費時間が大きい
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.3 CUDA化処理プロファイリング
67
nvvp – kernel analysis
自動変数の扱いに問題?
Occupancy(*) が低い
計算資源をフルに使えていない
(*) Occupancy: CUDA へのWarp充填度
GPU 処理はレイテンシが高いので
それを隠すためにSMに多数のWarp
を投入する必要がある
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.3 CUDA化処理プロファイリング
68
nvvp – latency analysis
nvvp – compute analysis
Divergence に問題を抱えたコードが存在 Divergence(*) に問題を抱えた箇所がある
パーティクル数が1280以下だと
SM を全部(20 個)使い切らない
(*) Divergence: 命令を実行したスレッドの割合。条件分岐があると一部のスレッドしか
実行を行わないことがあり、実行を行わないスレッドが多いほどこの値が低くなる
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
• cudaMemcpyで時間がかかる
• Integrated GPU なのでコピーは本来不要
• ⇒ Unified Memory を使用してコピーを削除する
3.4.4 CUDA化処理最適化 – 方針 (1)
69
CPU
(Host)
GPU
DRAM GDRAM
PCIe
CPU
(Host)
iGPU
SoC DRAM
Jetson での Unified Memory
Discrete GPU での Unified Memory
※ Unified Memory: ホスト, GPU から同一のメモリアドレスでアクセスできるマネージドメモリ
cudaMemcpy での明示的なメモリ転送を行わなくてよい
Discrete GPU では DRAM, GDRAM 間で暗黙的にメモリ転送される
Jetson では同一の SoC DRAM にアクセスするため転送が不要
暗黙的に転送
同一メモリアドレスでアクセス
同一メモリアドレスでアクセス
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.4 CUDA化処理最適化 – 方針 (2)
• Divergence
• 全パーティクルの重み合計をatomicAddでReduce計算している箇所が原因
• ⇒ ワープ内シャッフル命令によりReduce
• ⇒ ワープ間の Reduce は CPU で計算
• Occupancy
• Blockのスレッド数は32まで引き下げられる
• ⇒ 64 から 32 に変更
70
samples[global_thread_num].weight *= p;
// atomicAdd の実装は NVIDIA ドキュメント[5]参照
atomicAdd(total_weight, samples[global_thread_num].weight);
for (int i = 16; i >= xdim; i >>= 1) {
current_weight += __shfl_down_sync(0xffffffff, current_weight, i);
}
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.4 CUDA化処理最適化 – 効果
71
cpu : CPU 処理時の処理時間
gpu-naive : Naive な CUDA 実装の処理時間
gpu-optimived : 最適化 CUDA 実装の処理時間
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.4 CUDA化処理最適化 – プロファイリング
72
NVIDIA® Nsight™ Systems
cudaMemcpy は消えている
CUDAカーネルの実行時間も短い
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.4 CUDA化処理最適化 – プロファイリング
73
nvvp – kernel analysis
演算ユニットはほぼ使い切っている
メモリ帯域はまだまだ空きがある
メモリの使用効率はよくない
Occupancy は低いが
演算ユニットを使い切っているので
影響は低い
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.4 CUDA化処理最適化 – プロファイリング
74
nvvp – compute analysis
強烈な Divergence はなくなった
nvvp – latency analysis
Occupancy は改善していないがこれ以上 Warp を詰め込んでも
演算ユニットが詰まるだけ
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.4 CUDA処理最適化 – さらなる検討
• 演算ユニットの負荷削減
• ⇒ 演算強度を軽減する (double -> float)
• Occupancy改善
• ⇒ 内側のループ (各パーティクル内の処理) も並列処理する
• メモリ使用効率、Divergence軽減
• ランダムアクセスが必要なアルゴリズムのため難度が高い
ただし他の処理と比較して十分高速なため、これ以上の最適化は効果が薄い
75
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
3.4.5 Jetson上における性能測定の留意点
• Jetsonにはいくつかの性能モードがあるので測定時には性能モードをあわせる
• 下記例ではモード3 (30W、8 CPU)
• CPU/GPU動作周波数を固定する
• デフォルトだと、処理負荷、CPU温度に応じて動的に動作周波数が変わり、処理時間
がばらつく
• jetson_clocksコマンドで動作周波数を固定する
• 同時にファンも最大まで回しておく
参考 : NVIDIA 公式ドキュメント
76
$ sudo /usr/bin/jetson_clocks --fan
$ sudo /usr/sbin/nvpmodel -m 3
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
4 今後の課題
• メカナムローバーでの ROS2 navigationによる自律走行
• amcl高速化によるnavigationへの効果測定
• navigation2内の他パッケージのCUDA高速化
• amclのさらなるCUDA高速化
• オドメトリ更新
• リサンプリング (KD木構築のCUDA化が必要)
77
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation Copyright © Fixstars Corporation
Q&A time
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
フィックスターズでは仲間を募集しています!
さまざまな専門性を持つエンジニアを募集しています
詳細は https://www.fixstars.com/ja/recruit/ まで
79
Fixstars Corporation www.fixstars.com
Copyright © Fixstars Corporation
Thank You
お問い合わせ窓口 : contact@fixstars.com

More Related Content

PDF
tf,tf2完全理解
PDF
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
PDF
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
PPTX
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
PPTX
[DL輪読会]Objects as Points
PDF
ROSによる今後のロボティクスのあり方
PDF
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
PDF
いまさら聞けない!CUDA高速化入門
tf,tf2完全理解
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
[DL輪読会]Objects as Points
ROSによる今後のロボティクスのあり方
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
いまさら聞けない!CUDA高速化入門

What's hot (20)

PPTX
ORB-SLAMの手法解説
PDF
UnityとROSの連携について
PDF
オープンソース SLAM の分類
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
PPTX
画像処理AIを用いた異常検知
PPTX
近年のHierarchical Vision Transformer
PDF
SSII2018TS: 3D物体検出とロボットビジョンへの応用
PDF
NEDO講座 MoveIt! チュートリアル 第1部
PPTX
【DL輪読会】DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Dri...
PDF
LiDAR-SLAM チュートリアル資料
PDF
1076: CUDAデバッグ・プロファイリング入門
PDF
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
PDF
Cartographer を用いた 3D SLAM
PDF
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
PDF
ORB-SLAMを動かしてみた
PDF
最適化超入門
PDF
動作認識の最前線:手法,タスク,データセット
PDF
SSII2022 [OS3-02] Federated Learningの基礎と応用
PDF
深層学習によるHuman Pose Estimationの基礎
PDF
3次元レジストレーション(PCLデモとコード付き)
ORB-SLAMの手法解説
UnityとROSの連携について
オープンソース SLAM の分類
ARM CPUにおけるSIMDを用いた高速計算入門
画像処理AIを用いた異常検知
近年のHierarchical Vision Transformer
SSII2018TS: 3D物体検出とロボットビジョンへの応用
NEDO講座 MoveIt! チュートリアル 第1部
【DL輪読会】DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Dri...
LiDAR-SLAM チュートリアル資料
1076: CUDAデバッグ・プロファイリング入門
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
Cartographer を用いた 3D SLAM
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
ORB-SLAMを動かしてみた
最適化超入門
動作認識の最前線:手法,タスク,データセット
SSII2022 [OS3-02] Federated Learningの基礎と応用
深層学習によるHuman Pose Estimationの基礎
3次元レジストレーション(PCLデモとコード付き)
Ad

More from Fixstars Corporation (20)

PPTX
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
PDF
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
PDF
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
PPTX
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
PDF
株式会社フィックスターズの会社説明資料(抜粋)
PPTX
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
PDF
Fpga online seminar by fixstars (1st)
PDF
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
PDF
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
PDF
株式会社フィックスターズ 会社説明資料(抜粋)
PDF
株式会社フィックスターズ 会社説明資料(抜粋)
PDF
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
PDF
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
PDF
株式会社フィックスターズ 会社説明資料(抜粋)
PPTX
第8回 社内プログラミングコンテスト 結果発表会
PPTX
第8回 社内プログラミングコンテスト 第1位 taiyo
PPTX
第8回 社内プログラミングコンテスト 第2位 fy999
PPTX
第8回 社内プログラミングコンテスト 第3位 logicmachine
PPTX
株式会社フィックスターズ 会社説明資料(抜粋)
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
株式会社フィックスターズの会社説明資料(抜粋)
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fpga online seminar by fixstars (1st)
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
いまさら聞けないarmを使ったNEONの基礎と活用事例
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
株式会社フィックスターズ 会社説明資料(抜粋)
第8回 社内プログラミングコンテスト 結果発表会
第8回 社内プログラミングコンテスト 第1位 taiyo
第8回 社内プログラミングコンテスト 第2位 fy999
第8回 社内プログラミングコンテスト 第3位 logicmachine
株式会社フィックスターズ 会社説明資料(抜粋)
Ad

Jetson活用セミナー ROS2自律走行実現に向けて

  • 1. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Copyright © Fixstars Corporation Jetson活用セミナー ROS2自律走行実現に向けて 自律移動ロボット用-自己位置推定のCUDA高速化
  • 2. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 本日のアジェンダ • フィックスターズ会社紹介 • 会社概要と各種サービス • テクニカルセッション • ros1_brigeを用いた搬送ロボットメカナムローバーのROS2対応 • 自己位置推定アルゴリズムamclの高速化(プロファイリング、CUDA化) • Q&A 2
  • 3. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 発表者紹介 • 山田真介 (Shinsuke Yamada) • ディレクター • 博士 (工学) • 主に自動運転関係のプロジェクトマネジメントを担当 • 深層学習における量子化 • 車両運動制御プログラムの高速化 • 坂本浩平 (Kohei Sakamoto) • シニアエンジニア • プロトタイプ自律ロボットのアルゴリズム開発や CUDA 高速化、自動運転システム の構築を担当 • 高速化に興味 • アルゴリズム/SIMD/CUDA/高速コード実装 3
  • 4. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Copyright © Fixstars Corporation フィックスターズのご紹介
  • 5. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 5 フィックスターズは、コンピュータの性能を最大限に引き出し大量データの高速処理を実現する、 高速化のエキスパート集団です。 低レイヤ ソフトウェア技術 アルゴリズム 実装力 各産業・研究 分野の知見 フィックスターズの強み
  • 6. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation ソフトウェア高速化サービス概要 6 お客様のソースコードをご提供いただき、 ソフトウェアの最適化やアルゴリズムの改良を行い高速化したコードをお返しします。 当社 お客様 オリジナルソースコードのご提供 高速化したソースコード コンサルティング 高速化 サポート 性能評価 ボトルネックの特定 アルゴリズムの改良・開発 ハードウェアへの最適化 レポート作成 レポートやコードへのQ&A 実製品への組込み支援
  • 7. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 7 ソフトウェア高速化サービス領域 大量データの高速処理がお客様の製品競争力の源泉となる、 様々な領域でソフトウェア開発・高速化サービスを提供しています。 ・NAND型フラッシュメモリ向けファー ムウェア開発 ・次世代AIチップ向け開発環境基盤開発 Semiconductor ・デリバティブシステムの高速化 ・HFT(アルゴリズムトレード)の高速化 Finance ・自動運転の高性能化、実用化 ・次世代パーソナルモビリティの研究開発 Mobility ・ゲノム解析の高速化 ・医用画像処理の高速化 ・AI画像診断システムの研究開発 Life Science ・Smart Factory化支援 ・マシンビジョンシステムの高速化 Industrial
  • 8. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Fixstars Autonomous Technologies 8 高速化技術のフィックスターズと豊田通商グループのネクスティ エレクトロニクスによる合弁会社 並列化・最適化・機械学習・コンピュータビジョン技術を駆使し、自動運転社会の実現を加速する 会社名: Fixstars Autonomous Technologies 設立:2018年2月1日 資本金:3,000万円 (株)フィックスターズ 66.6% (株)ネクスティ エレクトロニクス 33.4% 所在地:東京都港区芝浦3-1-1 代表取締役会長 : 蜂須賀 利幸 代表取締役社長:羽田 哲
  • 9. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 画像処理・アルゴリズム開発サービス 9 • お客様の課題 • 高度な画像処理、深層学習等のアルゴリズム開発を行える人材が社内に限られている • 考案中のアルゴリズムで機能要件は満たせそうだが、ターゲット機器上で性能要件まで クリアできるか不安 • 研究開発の成果が製品化にうまく結びつかない • 弊社の支援内容 • 課題に応じたアルゴリズム調査 • 深層学習ネットワーク精度改善、推論高速化手法調査 • 論文調査、実装 https://www.cs.toronto.edu/~frossard/post/vgg16/
  • 10. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation AI・深層学習関連サービス 10 • ディープラーニングの包括的開発技術 • ネットワーク設計からターゲットデバイスでの高速化のノウハウ • 大規模システムからエッジコンピューティングまでの開発実績 ネットワーク設計 データの前処理、データ拡張 精度改善 分散処理による学習高速化 各種DLフレームワーク クラウド・サーバ エッジ モデル圧縮 - 量子化 - 枝刈り - 蒸留 ターゲットデバイスへの ポーティング及び推論高速化 ◼ Visconti, ARM, GPU, DSP ◼ SIMD,NEON,CUDA,TensorRT
  • 11. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation GPU向け高速化サービス 11 • お客様の課題 • GPU 高速化の知見がない • 自力で GPU に乗せてみたものの望む性能が出ない • 弊社の支援内容 • GPU 高速化に関するコンサルティング • ボトルネック調査、GPU プログラムの高速化 • CPU/GPU が混在するヘテロジニアス環境での最適化 10~150 倍の 高速化事例あり
  • 12. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation AGV / AMR 開発における課題と当社サービス 12 量産機を見越して… • 製造原価を抑えたい • 組込み規模の限られた計算資源の中で 性能を出したい • 複数台のロボットにも対応したい 後継機に向けて… • 実製品向けの開発プラットフォームに 変更したい • 計算資源はそのまま性能を落とさずに 機能追加したい • 計算機資源の選定 • ロボット試作品の組み上げ • ロボットの動作確認・評価 • ロボット開発プラットフォームの適用・移植 • アルゴリズム開発・改良 • 処理時間短縮・高速化 開発課題 当社サービス 本セミナーで紹介
  • 13. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Copyright © Fixstars Corporation テクニカルセッション
  • 14. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Copyright © Fixstars Corporation 1. はじめに
  • 15. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 1. はじめに 「ROS2上でナビゲーション処理を行う車両型ロボット開発環境を整備し、ROS2のナ ビゲーション処理を高速化したい」という動機から、今回、以下のような取り組みを行 った。 • メカナムローバーのROS2対応 • ros1_bridgeによってROS1資産を活用しながらのROS2対応 • 自己位置推定パッケージamclのCUDA高速化 • ROS2ノードのプロファイリング(perf、NVIDIA Nsight Systems) • amclのCUDA実装およびプロファイリング(nvprof、NVIDIA Visual Profiler) 15
  • 16. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Copyright © Fixstars Corporation 2. メカナムローバーの ROS2対応
  • 17. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2. メカナムローバーのROS2対応 アウトライン • 2.1 メカナムローバーとは • 2.2 メカナムローバーのROS対応状況 • 2.3 メカナムローバーのROS2対応 17
  • 18. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.1 メカナムローバーとは • ヴイストン株式会社が販売する4輪のメカナムホイールを搭載した全方位移動台車ロ ボット[1] • 可搬重量約40kg、最高速度1.3m/s • 2021/11/1時点でROS1に対応 • 今回の一連の取り組みではメカナムローバーVer2.0を用いた 18 [1] https://www.vstone.co.jp/products/wheelrobot/ver2.0.html
  • 19. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.1 メカナムローバーとは • ハード構成は以下の通り(購入時オプションよって構成が異なる)。 19 PC Arduino互換 CPUボード モーター ドライバ 2D LiDAR DCモーター エンコーダ [2] https://www.hokuyo-aut.co.jp/search/single.php?serial=17 USB USB I2C URG-04LX-UG01[2] 測距範囲:0.02~5.6m 走査角度:240° メカナムローバー本体
  • 20. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.1 メカナムローバーとは • LiDARをVelodyne VLP-16に変更した • Jetson AGX Xavierを用いた 20 PC Arduino互換 CPUボード モーター ドライバ 3D LiDAR DCモーター エンコーダ [3] https://velodynelidar.com/products/puck Ethernet USB I2C メカナムローバー本体 Velodyne VLP-16[3] 測距範囲:0.5~100m 水平FOV:360° 垂直FOV:30°(±15°) ✓ 測距範囲を広くし、広域のフィールドで も自己位置推定を行いやすくしたい ✓ 今後、3D SLAM検討もできるようにしたい Jetson AGX Xavier
  • 21. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.2 メカナムローバーのROS対応状況 • 2021/11/1時点でROS1のみサポートされている • 公式で動作検証されているナビゲーション時のROS1ノード構成は以下の通り。 21 amcl urg_node pub_odom move_base dwa_local_ planner map odom rover_odo rover_twist map_server scan odom amcl_pose 経路生成、走行制御 自己位置推定 地図配信 2D LiDAR キャプチャ オドメトリ 変換
  • 22. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.2 メカナムローバーのROS対応状況 • 2021/11/1時点でROS1のみサポートされている • 公式で動作検証されているナビゲーション時のROS1ノード構成は以下の通り。 22 amcl urg_node pub_odom move_base dwa_local_ planner map odom rover_odo rover_twist map_server scan odom amcl_pose geometry_msgs/Twistから nav_msgs/Odometryに変換
  • 23. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.2 メカナムローバーのROS対応状況 • Velodyne VLP-16に変更したことで以下のようなノード構成となった 23 amcl velodyne_driver pub_odom move_base dwa_local_ planner map odom rover_odo rover_twist map_server odom amcl_pose velodyne_pointcloud pointcloud_to_ laserscan velodyne_packets scan points_raw 経路生成、走行制御 自己位置推定 地図配信 オドメトリ 変換 3D LiDARキャプチャ 3D点群、2Dスキャン変換
  • 24. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.2 メカナムローバーのROS対応状況 • Velodyne VLP-16に変更したことで以下のようなノード構成となった 24 amcl pub_odom move_base dwa_local_ planner map odom rover_odo map_server odom amcl_pose velodyne_packets scan points_raw velodyne_driver velodyne_pointcloud pointcloud_to_ laserscan rover_twist
  • 25. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.2 メカナムローバーのROS対応状況 • 速度指令(rover_twistトピック)からモーター制御指令までの処理の流れ 25 PC Arduino互換 CPUボード モーター ドライバ DCモーター エンコーダ ① rover_twistトピックを配信 ②(ROS1の) rover_twistトピックを 購読し、モータードライバを介して 制御指令を出す ※Arduinoのスケッチ実装 rover_twist ③モーターを回転させる メカナムローバー本体
  • 26. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.2 メカナムローバーのROS対応状況 • エンコーダ情報からオドメトリ(rover_odoトピック)を算出する処理の流れ 26 PC Arduino互換 CPUボード モーター ドライバ DCモーター エンコーダ ③rover_odoトピックを購読 ④pub_odomノードでodomトピックに変換 ②モータードライバ経由で得られる モーター回転数からオドメトリを計算し、 (ROS1の)rover_odoトピックを配信 ※Arduinoのスケッチ実装 rover_odo ①モーター回転数を取得 メカナムローバー本体
  • 27. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 • 今回、以下のような方針でROS2対応を行った • メカナムローバーのROS2対応のファーストステップとして「amclを用いた自己位 置推定まで」を行う(=ナビゲーションまではやらない) • ros1_bridge[4]を用いることで既存のROS1資産を使いつつ、センサ関連や自己位 置推定処理をROS2化する • 自己位置推定に関連する主な処理をROS2 Galactic上で動作させる • Galacticより前のROS2ディストリビューションでは使いたい機能が使えないことが 多かったため 27 [4] https://github.com/ros2/ros1_bridge
  • 28. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 • 各ノードが動作するROS1、ROS2ディストリビューション • A:ROS1 Noetic、B:ROS2 Foxy、C:ROS2 Galactic 28 amcl velodyne_driver pub_odom map odom rover_odo map_server odom amcl_pose velodyne_pointcloud pointcloud_to_ laserscan scan ros1_bridge initial_pose rviz2 velodyne_packets points_raw メカナムローバー内蔵のArduinoスケッチ実装 はROS1のままで動かす A C B
  • 29. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 • 各ノードが動作するROS1、ROS2ディストリビューション • A:ROS1 Noetic、B:ROS2 Foxy、C:ROS2 Galactic 29 amcl velodyne_driver pub_odom map odom rover_odo map_server odom amcl_pose velodyne_pointcloud pointcloud_to_ laserscan scan ros1_bridge initial_pose rviz2 velodyne_packets points_raw Velodye関連のROS2パッケージはROS2 Foxy対応済なのでFoxyで動かす A C B
  • 30. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 • 各ノードが動作するROS1、ROS2ディストリビューション • A:ROS1 Noetic、B:ROS2 Foxy、C:ROS2 Galactic 30 amcl velodyne_driver pub_odom map odom rover_odo map_server odom amcl_pose velodyne_pointcloud pointcloud_to_ laserscan scan ros1_bridge initial_pose rviz2 velodyne_packets points_raw ROS1、ROS2間の通信の相互変換 自己位置推定関連は ROS2 Galiacticで動かす A C B
  • 31. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 • 各ノードが動作するコンピュータ • A:Jetson AGX Xavier、B:ノートPC(Intel CPU) 31 amcl velodyne_driver pub_odom map odom rover_odo map_server odom amcl_pose velodyne_pointcloud pointcloud_to_ laserscan scan ros1_bridge initial_pose rviz2 velodyne_packets points_raw Jetson AGX Xavier 可視化用ノートPC A B
  • 32. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 • 各ノードが動作するコンピュータ • A:Jetson AGX Xavier、B:ノートPC(Intel CPU) 32 amcl velodyne_driver pub_odom map odom rover_odo map_server odom amcl_pose velodyne_pointcloud pointcloud_to_ laserscan scan ros1_bridge initial_pose rviz2 velodyne_packets points_raw rviz2による可視化及び 初期位置指定を行うため に別PCを用意 可視化用ノートPC A B
  • 33. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 • 複数ディストリビューションがあるためDockerコンテナ化した • A:ROS1 Noetic、B:ROS2 Foxy、C:ROS2 Galactic、D:ROS2 Galactic(CUDA) 33 amcl velodyne_driver pub_odom map odom rover_odo map_server odom amcl_pose velodyne_pointcloud pointcloud_to_ laserscan scan ros1_bridge initial_pose rviz2 velodyne_packets points_raw A C B D
  • 34. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 このDocker環境を構築するにあたり、以下のようなハマりポイントがあった • 扱うDockerコンテナが多いため手順が煩雑 • 背景:様々なROS1、ROS2ディストリビューションが混在するため • 対応:docker-composeを使うことで簡単に起動できるようした • Jetson AGX Xavier、ノートPC間でROS2の通信ができない • 課題 • 今回のハードウェア構成では、有線LAN、Wi-Fiといった複数のNICを同時に使用す るが、 CycloneDDS側で複数NICを適切にハンドリングしてくれない • 対応 • CycloneDDS設定で明示的にNICを設定することで対応[5] 34 [5] http://www.robotandchisel.com/2020/08/12/cyclonedds/ export CYCLONEDDS_URI="<CycloneDDS><Domain><General><NetworkInterfaceAddress>wlan0</NetworkInterfaceAddress></General></Domain></CycloneDDS>" 設定例(wlan0となっている箇所はネットワークインターフェース名)
  • 35. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 Jetson AGX Xavier上で動作するCUDA、ROS2 Galactic環境構築 • 課題 • ROS2公式のDockerイメージ (ros:galactic)[6]だとROS2 Galacticは使えるが、 CUDAを使えない • NGC(NVIDIA GPU CLOUD)配布のDockerイメージ(nvcr.io/nvidia/l4t-base)[7] だとCUDAは使えるが、Ubuntu 18.04ベースであるため、ROS2 Galacticをソースコ ードから入れる必要あり[8] 35 [6] https://hub.docker.com/_/ros [7] https://ngc.nvidia.com/catalog/containers/nvidia:l4t-base [8] https://docs.ros.org/en/galactic/Installation/Ubuntu-Development-Setup.html
  • 36. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.3 メカナムローバーのROS2対応 Jetson AGX Xavier上で動作するCUDA、ROS2 Galactic環境構築 • 今回の対応 • NGC配布Dockerイメージ(nvcr.io/nvidia/l4t-base)をベースにROS2 Galacticを インストールしたDockerイメージ(dustynv/ros:galactic-ros-base-l4t-r32.6.1) [9]を活用 • amclおよび依存ROS2パッケージをソースコードからビルド • ROS2 Galacticをソースコードからインストールしている都合上、aptでROS2 Galacticパッケージのインストールができないため 36 [9] https://github.com/dusty-nv/jetson-containers
  • 37. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 2.4 実機デモ 37
  • 38. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Copyright © Fixstars Corporation 3. amclパッケージの CUDA高速化
  • 39. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3. amclパッケージのCUDA高速化 アウトライン • 3.1 背景 • 3.2 amcl とは • 3.3 amcl のプロファイリング • 3.4 amcl の CUDA 化による高速化 39
  • 40. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.1 背景 • ナビゲーション処理に関わるROS2パッケージをCUDA実装することで、処理の高速 化およびCPU負荷低減を実現したい • 以下の理由から今回はamclパッケージ(自己位置推定処理)[10]に着目した • パーティクル毎に処理が独立しており、並列度が高く、GPUと相性がよい(amclの アルゴリズム詳細は後述) • GPUにオフロードできれば自己位置推定精度を改善するためにパーティクル数を増や しやすい • navigation2でもGPU、CPU高速化対象アルゴリズムの候補として挙がっている • https://github.com/ros-planning/navigation2/issues/1391 • https://github.com/ros-planning/navigation2/issues/1781 • https://navigation.ros.org/2021summerOfCode/projects/multithreading.html 40 [10] https://github.com/ros-planning/navigation2/tree/galactic/nav2_amcl
  • 41. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.2 amcl とは • Adaptive Monte Carlo Localization • 自己位置推定アルゴリズム • 内界センサ、外界センサの情報からロボットの現在位置を推定する • 特徴 • パーティクルフィルタをベースとしたアルゴリズム • 位置姿勢の候補とその尤度をパーティクルで表現する • パーティクルの散布範囲と数を動的に変更する • 自己位置が不確かな場合大域的リセットを行う 41 赤い点群: パーティクル 外周の点群: LiDAR によるスキャン
  • 42. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.2 amcl とは • amcl のおおまかな処理の流れ 42 パーティクルの初期化 (初期の位置姿勢が取り得る範囲に パーティクルをランダム散布) 予測 (ロボットの移動分を内界センサで取得し、 ノイズを混ぜてパーティクルを移動させる) 更新 (各パーティクルについて、外界センサ情報 との合致度に基づき尤度を更新) 推定 (各パーティクルの情報から 位置姿勢を一意に推定) リサンプリング (尤度の低いパーティクルを除去し、尤度の 大きいパーティクル付近にランダムに散布)
  • 43. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3 amcl のプロファイリング • プロファイリング • 目的のプログラムを分析し、計算時間が大きい箇所を特定する ⇒ amcl の処理のうち、どこを高速化すべきか目星をつける 43 amcl プロファイリング amcl 〇〇[%] 〇〇[%] 〇〇[%] 〇〇[%] 〇〇[%] 重い処理
  • 44. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3 amcl のプロファイリング • 実際に amcl のプロファイリングを実施 • 説明内容 • 3.3.1 プロファイリングの実行環境 • 3.3.2 プロファイリング時のノード構成 • 3.3.3 プロファイリング方法 • 3.3.4 プロファイリング結果 44
  • 45. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.1 プロファイリングの実行環境 • ハードウェア • NVIDIA® Jetson AGX Xavier™ • CPU: ARMv8 Processor rev 0 (v8l)、64bit 8コア • GPU: NVIDIA Volta™, CUDAコア512基 • RAM: 32GB • 動作モード: 30W 8コア • 動作周波数(Max) … CPU: 1.2GHz、GPU: 905 MHz • ソフトウェア • NVIDIA® JetPack SDK 4.6 (L4T 32.6.1) (*) • OS: Ubuntu18.04 • CUDA: 10.2 • コンパイラ: gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 45 (*) JetPack : Jetson用の開発キット.L4T 32.6.1を含む L4T (NVIDIA® Jetson™ Linux Driver Package) : Jetson向けのサポートパッケージ
  • 46. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.1 プロファイリングの実行環境 • ROS2の動作環境 • ROSディストリビューション : ROS2 Galactic • 2021年11月現在の最新バージョン • Dockerコンテナ内にROS2環境を構築 • Linux 18.04 (L4T 32.6.1) 上にROS2 Galacticをビルドしたコンテナ[11]を使用 46 Galactic Geochelone リリース: 2021/5/23 [11] https://github.com/dusty-nv/jetson-containers Jetson AGX Xavier Linux 18.04 (L4T 32.6.1) Docker コンテナ (L4T 32.6.1) ROS2 Galactic ハードウェア ホストOS ゲストOS アプリケーション
  • 47. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.2 プロファイリング時のノード構成 • 以下のノード構成でamclを実行 47 nav2_amcl nav2_map_ server nav2_lifecycle _manager rosbag2 ROS2 Galactic 各種センサ情報、 オドメトリ情報など 地図情報 ステート管理 amclの処理結果の再現性を確保するため、 rosbag2 で記録したデータを入力に使用する
  • 48. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.3 プロファイリング方法 今回実施したプロファイリングの流れ (1) amclノード (ROS2)のビルド・実行 (2) perf[12]、FlameGraph[13]を使用して分析 (3) 分析結果から計算負荷の高い関数を特定する 48 [12] perf … Linuxカーネルで使用可能な性能分析ツール [13] FrameGraph … 性能解析結果を階層図で可視化できるツール https://www.brendangregg.com/flamegraphs.html amcl::funcA1_1 (…) { ……… ; ...... ; ……… ; …………… ; ………… ; } ⇒高速化の余地あり ビルド amcl ノード 実行 amcl ソースコード 実行 ファイル ROS2 Galactic FlameGraph 分析 perf amcl::funcA1_1 amcl::funcA1 cpu utilization [%] amcl::funcA funcB amcl A2 B2
  • 49. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.3 プロファイリング方法 (1) amcl ノード (ROS2) のビルド・実行 • Dockerコンテナを起動する • Dockerコンテナ内でのプロファイリングを有効にするため、 --privileded オプションを付与して起動する • amclを含む ROS2パッケージをビルドする • プロファイリングに必要な情報を実行ファイルに付与するため、以下のオプションを指定 -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -funwind-tables -g3" 49 $ docker run --gpus all --rm -it –-privileged container:latest $ colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release ¥ -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -funwind-tables -g3" ビルド (colcon) amcl ノード 実行 amcl ソースコード 実行 ファイル ROS2 Galactic
  • 50. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.3 プロファイリング方法 (1) amcl ノード (ROS2) のビルド・実行 • amclノードの実行方法について • 後述のperfによる分析において分析対象を絞り込むため、amclノード単体で起動する ビルドされたamclのバイナリを直接実行することで可能 (ros2 run や launch を使わない) 50 $ install/nav2_amcl/lib/nav2_amcl/amcl --ros-args [options] ビルド (colcon) amcl ノード 実行 amcl ソースコード 実行 ファイル ROS2 Galactic ビルドされたamclノードのバイナリを 実行することでamclノードのみ起動できる
  • 51. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.3 プロファイリング方法 (2) perf、FlameGraphを使用して分析 実行手順 1. Dockerコンテナにperfをインストール 2. perfによる分析を有効にする 3. perfの引数にamclの実行コマンドを指定して実行 perf record –g: perf によるデータ採取コマンド (-g: 関数の階層構造を読み取る) 51 $ apt-get install linux-tools-generic $ /usr/lib/linux-tools-4.15.0-161/perf record –g ¥ install/nav2_amcl/lib/nav2_amcl/amcl --ros-args [options] sudo sysctl -w kernel.perf_event_paranoid=-1
  • 52. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.3 プロファイリング方法 (2) perf、FlameGraphを使用して分析 実行手順 4. FlameGraphのスクリプト[14]を使用し、 perfの分析結果を可視化 52 $ perf script | ./stackcollapse-perf.pl ¥ | ./flamegraph.pl > output.svg FrameGraph [14] https://github.com/brendangregg/FlameGraph
  • 53. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.3 プロファイリング方法 (3) 分析結果から計算負荷の高い関数を特定する • FlameGraphから計算負荷が高い関数を特定する • FlameGraphにより、関数構造と処理負荷の比率が分かる • タイマの埋め込みにより処理時間を計測する • FlameGraphで判明した処理負荷の大きい関数周辺に タイマを埋め込み、具体的な処理時間を計測する 53 処理負荷 関数の呼び出し順序
  • 54. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.4 プロファイリング結果 • FlameGraphから計算負荷が高い関数を特定する • amclの主処理の中で、sensorFunction関数の計算負荷が最も高い 54 laserReceived関数 : amclノードによる自己位置推定処理の本体となる関数 ロボットの動作中、VLP-16からのセンサ情報を繰り返し受け取り、処理し続ける sensorFunction関数 : amclノードによる自己位置推定処理の中で、 最も計算負荷が高い関数
  • 55. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.3.4 プロファイリング結果 • タイマの埋め込みにより処理時間を計測する 55 laserReceived: 41.761 msec getOdomPose: 0.083 msec shouldUpdateFilter: 0.016 msec odometryUpdate: 2.504 msec updateFilter (≒ sensorFunction): 33.179 msec pf_update_resample: 4.875 msec publishParticleCloud: 0.472 msec getMaxWeightHyp: 0.526 msec publishAmclPose: 0.128 msec calculateMaptoOdomTransform: 0.194 msec sendMapToOdomTransform: 0.175 msec odometryUpdate 6% updateFilter 79% pf_update_resample 12% laserReceived関数処理時間内訳 getOdomPose shouldUpdateFilter odometryUpdate updateFilter pf_update_resample publishParticleCloud getMaxWeightHyp publishAmclPose calculateMaptoOdomTransform sendMapToOdomTransform
  • 56. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4 amclのCUDA化による高速化 アウトライン • 3.4.1 NaiveなCUDA化処理の実装 • 3.4.2 CUDA実行モデル • 3.4.2 CUDA化処理プロファイリング • 3.4.3 CUDA化処理最適化 • 3.4.4 Jetson上における性能測定の留意点 56
  • 57. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4 amclのCUDA化による高速化(sensorFunction CPU処理時間) • CPU処理での処理時間を計測 • amclでは適応的にパーティクル 数を変化させる • rosbagファイルを流して一連の 自己位置推定を行った時の パーティクル数と処理時間の 関係を測定 • 結果 • 処理時間はパーティクル数に比例 • 最大パーティクル数で 約40msec • LiDARの入力周期が10Hzなので 最大レイテンシが約半周期 57
  • 58. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.1 NaiveなCUDA化処理の実装 – 検討 • sensorFunctionの処理 • 各パーティクルに対して LiDAR観測の尤度を求めて重みを更新する • amclデフォルトではパーティクル数 (500-2000)、走査方向 (60) の計算が必要 • 計算はパーティクルで並列となる 58 各パーティクル処理 各走査方向に対する尤度の和を 観測の尤度とする : 走査線
  • 59. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.1 NaiveなCUDA化処理の実装 – 結果 • まずはCPU処理をそのままCUDA化 • CUDAの各スレッドで 各パーティクルを処理 • CUDAで必要なメモリ領域は cudaMallocで確保 • CUDA処理前にデータを cudaMallocで確保した領域にコピー • 高速化の効果が見える • パーティクル数、走査方向数を 増やして自己位置推定精度を 確保することが可能 • レイテンシが低くなる • CPU負荷の削減 • 削減分を他処理にまわせる 59 cpu : CPU処理時の処理時間 gpu-naive : NaiveなCUDA実装の処理時間
  • 60. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.2 CUDA実行モデル 60 Warp (32Threds) … Block (~1024Threds) … タスク … GPU コア レジスタ キャッシュ 命令ユニット SM … • CUDAの内部には複数のSMがある • SM : Streaming Multiprocessor • 独立して実行できるプロセッサー • Jetson AGX Xavierでは20個 • カーネルの実行スレッドはBlockで区切 られる • Block 内部は32スレッド単位のWarp で区切られる • Block単位でSMに割り当て • 同じタスクが違うSMで処理される • Warpごとに処理される • Warpに所属する32スレッドが同時に 処理を行う Block を割り当て、Warpごとに処理
  • 61. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.3 CUDAプログラムのプロファイリング • プロファイリング実行環境 61 Jetson AGX Xavier ROS2 Galactic (Docker コンテナ) デスクトップPC(Ubuntu 18.04) プロファイリングツール (Nsight Systems、nvvp) SSH 分析データ amcl ノードは Docker コンテナ内で実行 amcl ノード 分析
  • 62. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation amcl ノード ROS2 Galactic 3.4.3 CUDAプログラムのプロファイリング • NVIDIA® Nsight™ Systems • NVIDIA社製のプロファイリングツール • プロファイリング結果をGUIで可視化 • GPU、CPUの処理どちらも分析可能 • GPUはCUDA API/カーネル実行時間をプロファイリング可能 62 Nsight Systems (分析) 分析 Nsight Systems (可視化) デスクトップPC Jetson AGX Xavier
  • 63. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.3 CUDAプログラムのプロファイリング • NVIDIA® Nsight™ Systems 実行手順 ① Jetson上でDockerコンテナを起動 Nsight Systems プロファイリングで使う一時ディレクトリをマウント ② Dockerコンテナ上で環境変数を設定 ③ Dockerコンテナ上で実行 ④ デスクトップPC上で Nsight Systems を立ち上げ Jetson に SSH 接続し docker 内で実行したプロセスを指定してプロファイリング 63 $ docker run --gpus all --rm -it --privileged --shm-size=1024m ¥ -v /opt/nvidia:/opt/nvidia -v /tmp/nvidia:/tmp/nvidia cuda-galactic:root LD_PRELOAD=“/opt/nvidia/nsight_systems/libToolsInjectionProxy64.so” ¥ install/nav2_amcl/lib/nav2_amcl/amcl --ros-args [options] export CUDA_INJECTION64_PATH="/opt/nvidia/nsight_systems/libToolsInjection64.so“ export QUADD_INJECTION_PROXY="OSRT, $QUADD_INJECTION_PROXY"
  • 64. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation • NVIDIA Visual Profiler (nvvp) • NVIDIA社製のプロファイリングツール • CUDA カーネル内部のプロファイリング結果をGUIで可視化 • nvprof • NVIDIA社製のプロファイリングツール • プロファイリングのメトリクス取得 amcl ノード ROS2 Galactic 3.4.3 CUDAプログラムのプロファイリング 64 nvprof 分析 nvvp Linux 18.04 デスクトップPC Jetson AGX Xavier
  • 65. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.3 CUDAプログラムのプロファイリング • nvvp 実行手順 ① Jetson上でDockerコンテナ起動 ② Dockerコンテナ上でnvprof実行 ③ 生成したプロファイル結果をscpコマンド等でデスクトップPCにコピー ④ デスクトップPCでnvvpを起動してプロファイリング結果を可視化 65 $ docker run --gpus all --rm -it --privileged --shm-size=1024m cuda-galactic:root nvprof --analysis-metrics -o amcl_cuda.nvvp ¥ ../install/nav2_amcl/lib/nav2_amcl/amcl --ros-args [params] sudo /usr/local/cuda/bin/nvvp ¥ -vm /usr/lib/jvm/java-8-openjdk-amd64/bin/java amcl_cuda.nvvp
  • 66. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.3 CUDA化処理プロファイリング 66 NVIDIA® Nsight™ Systems メモリコピーの消費時間が大きい
  • 67. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.3 CUDA化処理プロファイリング 67 nvvp – kernel analysis 自動変数の扱いに問題? Occupancy(*) が低い 計算資源をフルに使えていない (*) Occupancy: CUDA へのWarp充填度 GPU 処理はレイテンシが高いので それを隠すためにSMに多数のWarp を投入する必要がある
  • 68. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.3 CUDA化処理プロファイリング 68 nvvp – latency analysis nvvp – compute analysis Divergence に問題を抱えたコードが存在 Divergence(*) に問題を抱えた箇所がある パーティクル数が1280以下だと SM を全部(20 個)使い切らない (*) Divergence: 命令を実行したスレッドの割合。条件分岐があると一部のスレッドしか 実行を行わないことがあり、実行を行わないスレッドが多いほどこの値が低くなる
  • 69. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation • cudaMemcpyで時間がかかる • Integrated GPU なのでコピーは本来不要 • ⇒ Unified Memory を使用してコピーを削除する 3.4.4 CUDA化処理最適化 – 方針 (1) 69 CPU (Host) GPU DRAM GDRAM PCIe CPU (Host) iGPU SoC DRAM Jetson での Unified Memory Discrete GPU での Unified Memory ※ Unified Memory: ホスト, GPU から同一のメモリアドレスでアクセスできるマネージドメモリ cudaMemcpy での明示的なメモリ転送を行わなくてよい Discrete GPU では DRAM, GDRAM 間で暗黙的にメモリ転送される Jetson では同一の SoC DRAM にアクセスするため転送が不要 暗黙的に転送 同一メモリアドレスでアクセス 同一メモリアドレスでアクセス
  • 70. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.4 CUDA化処理最適化 – 方針 (2) • Divergence • 全パーティクルの重み合計をatomicAddでReduce計算している箇所が原因 • ⇒ ワープ内シャッフル命令によりReduce • ⇒ ワープ間の Reduce は CPU で計算 • Occupancy • Blockのスレッド数は32まで引き下げられる • ⇒ 64 から 32 に変更 70 samples[global_thread_num].weight *= p; // atomicAdd の実装は NVIDIA ドキュメント[5]参照 atomicAdd(total_weight, samples[global_thread_num].weight); for (int i = 16; i >= xdim; i >>= 1) { current_weight += __shfl_down_sync(0xffffffff, current_weight, i); }
  • 71. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.4 CUDA化処理最適化 – 効果 71 cpu : CPU 処理時の処理時間 gpu-naive : Naive な CUDA 実装の処理時間 gpu-optimived : 最適化 CUDA 実装の処理時間
  • 72. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.4 CUDA化処理最適化 – プロファイリング 72 NVIDIA® Nsight™ Systems cudaMemcpy は消えている CUDAカーネルの実行時間も短い
  • 73. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.4 CUDA化処理最適化 – プロファイリング 73 nvvp – kernel analysis 演算ユニットはほぼ使い切っている メモリ帯域はまだまだ空きがある メモリの使用効率はよくない Occupancy は低いが 演算ユニットを使い切っているので 影響は低い
  • 74. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.4 CUDA化処理最適化 – プロファイリング 74 nvvp – compute analysis 強烈な Divergence はなくなった nvvp – latency analysis Occupancy は改善していないがこれ以上 Warp を詰め込んでも 演算ユニットが詰まるだけ
  • 75. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.4 CUDA処理最適化 – さらなる検討 • 演算ユニットの負荷削減 • ⇒ 演算強度を軽減する (double -> float) • Occupancy改善 • ⇒ 内側のループ (各パーティクル内の処理) も並列処理する • メモリ使用効率、Divergence軽減 • ランダムアクセスが必要なアルゴリズムのため難度が高い ただし他の処理と比較して十分高速なため、これ以上の最適化は効果が薄い 75
  • 76. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 3.4.5 Jetson上における性能測定の留意点 • Jetsonにはいくつかの性能モードがあるので測定時には性能モードをあわせる • 下記例ではモード3 (30W、8 CPU) • CPU/GPU動作周波数を固定する • デフォルトだと、処理負荷、CPU温度に応じて動的に動作周波数が変わり、処理時間 がばらつく • jetson_clocksコマンドで動作周波数を固定する • 同時にファンも最大まで回しておく 参考 : NVIDIA 公式ドキュメント 76 $ sudo /usr/bin/jetson_clocks --fan $ sudo /usr/sbin/nvpmodel -m 3
  • 77. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation 4 今後の課題 • メカナムローバーでの ROS2 navigationによる自律走行 • amcl高速化によるnavigationへの効果測定 • navigation2内の他パッケージのCUDA高速化 • amclのさらなるCUDA高速化 • オドメトリ更新 • リサンプリング (KD木構築のCUDA化が必要) 77
  • 78. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Copyright © Fixstars Corporation Q&A time
  • 79. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation フィックスターズでは仲間を募集しています! さまざまな専門性を持つエンジニアを募集しています 詳細は https://www.fixstars.com/ja/recruit/ まで 79
  • 80. Fixstars Corporation www.fixstars.com Copyright © Fixstars Corporation Thank You お問い合わせ窓口 : contact@fixstars.com