1. On-device ML


์ผ๋ฐ˜์ ์œผ๋กœ ๋จธ์‹ ๋Ÿฌ๋‹์ด๋ผ ํ•˜๋ฉด, ์„ผ์„œ๋‚˜ ๊ฐœ์ธ์šฉ ๋””๋ฐ”์ด์Šค (ํ˜น์€ ๋‹ค๋ฅธ ์„œ๋ฒ„) ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ ์„œ๋ฒ„์—์„œ ย  ํ•™์Šตํ•˜์—ฌ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค.

google coral ๊ฐœ๋ฐœ๋ณด๋“œ๋ฅผ ์ด์šฉ์„ ํ†ตํ•ด, ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋ฐ”์ผ ํ˜น์€ ์„ผ์„œ ์ž์ฒด์—์„œ ๋จธ์‹ ๋Ÿฌ๋‹์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

2. Google Coral

๊ตฌ๊ธ€ ์ฝ”๋ž„์€ ๋กœ์ปฌAI ํ™˜๊ฒฝ์„ ์œ„ํ•œ ํ•˜๋“œ์›จ์–ด ๋ถ€ํ’ˆ, ์†Œํ”„ํŠธ์›จ์–ด ๋„๊ตฌ, ๊ทธ๋ฆฌ๊ณ  ๋กœ์ปฌAI๋กœ ์žฅ์น˜๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ์ „์— ํ•™์Šต๋œ ๋ชจ๋ธ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์—…์ด๋‹ค.

๋™์ „๋ณด๋‹ค ์ž‘์ง€๋งŒ ๊ณ ์„ฑ๋Šฅ์˜ ์‹ ๊ฒฝ๋ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” Edge TPUํ”„๋กœ์„ธ์„œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

๋ผ์ธ์—…(์‹œ๋ฆฌ์ฆˆ)์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ด๋‹ค. SBC(single board computer) ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋Š” dev board ์™€ SoM(system on module) ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
๊ฐœ๋ฐœ๋ณด๋“œ๋Š” Debian ๊ณ„์—ด์˜ Linux๋ฅผ ์ด์šฉํ•ด ๋ชจ๋“  device driver๋ฅผ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ evaluation cost๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
SoM ์€ ์–‘์‚ฐ์— ์ ํ•ฉํ•˜๋„๋ก TPU ์นฉ์„ ํฌํ•จํ•œ ๊ธฐ๋ณธ ๋ชจ๋“ˆ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

Google Coral ์‹œ๋ฆฌ์ฆˆ(Dev Board, Edge TPU)์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ TPU๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
TPU๋Š” Tensor Processor Unit์œผ๋กœ Tensor ๊ณ„์‚ฐ์— ์ตœ์ ํ™”๋œ ์—ฐ์‚ฐ์žฅ์น˜์ด๋‹ค.
Dev Board๋Š” CPU, ๋ฉ”๋ชจ๋ฆฌ, ๊ฐ์ข… ์ธํ„ฐํŽ˜์ด์Šค(USB, ์ด๋”๋„ท ๋“ฑ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
Edge TPU๋Š” usb๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ๊ธฐ๋กœ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๊ฐ™์€ ์žฅ์น˜์— ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


3. Convert Pytorch to TensorflowLite


pytorch๋Š” AI์— ํ•„์š”ํ•œ ์ž˜ ๋””์ž์ธ๋œ ๋ชจ๋“ˆ๊ณผ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ๋…ผ๋ฌธ์—ฐ๊ตฌ์—์„œ๋Š” ๊ฑฐ์˜ pytorch๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
ํ•˜์ง€๋งŒ, google coral์—์„œ๋Š” tensorflow ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅด ์‚ฌ์šฉํ•ด์•ผํ•˜๋ฏ€๋กœ, pytorch๋กœ ๊ตฌ์ถ•๋œ ๋ชจ๋ธ์„ tensorflow ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ ์ž ํ•œ๋‹ค.

pytorch๋ฅผ tensorflow๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์ง€๋งŒ (pytorch > ONNX > tensorflow > TFLite),
๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ, ๋ฐ์ดํ„ฐ ํŠน์„ฑ๊ณผ ๋ชจ๋ธ์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜๋™์œผ๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค.

ย  GPU Allocation class inheritance data processing fully connected layer forward method model allocation
PyTorch cuda.is_available() nn.Module torch.utils.data.Dataset
torch.utils.data.DataLoader
nn.Linear call() model.to()
Tensorfflow auto keras.Model tf.keras.utils.Sequence keras.layers.Dense forward() model()

*Tensorflow๋Š” tf.debugging.set_log_device_placement(True) ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์–ด๋””์— ํ• ๋‹น๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
PyTorch๋Š” GPU ํƒ‘์žฌ ์—ฌ๋ถ€๋ฅผ ๋‹ด์€ ๋ณ€์ˆ˜ device๋ฅผ ๋ชจ๋ธ ๊ฐ์ฒด์— ํ• ๋‹นํ•  ๋•Œ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค. model = NeuralNetwork().to(device)

*torch.utils.data.Dataset๋ฅผ ์ƒ์† ๋ฐ›์•„ custom dataset์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. tk.keras.utils.Sequence๋„ ์ด์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. DataLoader๋Š” ๋”ฐ๋กœ tf์— ๋Œ€์‘๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์…‹์— ๋งž๊ฒŒ ๋”ฐ๋กœ class ๋“ฑ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


Reference

[1] https://m.blog.naver.com/roboholic84/221850320761
[2] https://voidint.com/2020/09/25/google-coral-edge-inference-platform/
[3] https://velog.io/@2innnnn0/What-is-Coral-Dev-Board-USB-Accelerator
[4] https://acdongpgm.tistory.com/231



Categories:

Updated:

Leave a comment