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
Leave a comment