Cloud TPU v3-8 ๊ธฐ๋ฐ CNN ์ฐ์ฐ ๋ณ๋ชฉ ์ ๊ฑฐ ๋ฐ Throughput ์ต์ ํ
๐ TensorCraft Playbook: De CNNs de Sala de Aula a Cloud TPUs com Keras
AI ์์ฝ
Context
CIFAR-10 ๋ฐ์ดํฐ์ ๊ธฐ๋ฐ CNN ํ์ต ์ CPU์ ์์ฐจ ์ฒ๋ฆฌ ํ๊ณ๋ก ์ธํ ์ฐ์ฐ ๋ณ๋ชฉ ๋ฐ์. GPU ๋์ ์ VRAM-Core ๊ฐ ๋ฐ์ดํฐ ์ ์ก ์ง์ฐ์ธ Memory Wall ๋ฌธ์ ๋ก ์ธํด ํ๋์จ์ด ์ฑ๋ฅ์ ์์ ํ ํ์ฉํ์ง ๋ชปํ๋ ํ๊ณ ์กด์ฌ.
Technical Solution
- Systolic Array ์ํคํ ์ฒ ๊ธฐ๋ฐ TPU ๋์ ์ ํตํ ๋งคํธ๋ฆญ์ค ์ฐ์ฐ์ Memory Access ์ต์ํ ๋ฐ Throughput ์ ํ์ ํ์ฅ
- tf.distribute.TPUStrategy ๊ธฐ๋ฐ Synchronous Mirroring์ผ๋ก 8๊ฐ ์ฝ์ด ๊ฐ ๋ชจ๋ธ ๋ณต์ ๋ฐ Gradient ๋๊ธฐํ ๊ตฌํ
- XLA ์ปดํ์ผ๋ฌ๋ฅผ ํตํ Operator Fusion ์ ์ฉ์ผ๋ก Conv2D-ReLU ์ฐ์ฐ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ ์๊ตฌ๋ ๊ฐ์
- TFRecord ๋ฐ Protocol Buffers ๋์ ์ ํตํ ํ์ผ ์์คํ ์ค๋ฒํค๋ ์ ๊ฑฐ ๋ฐ ์์ฐจ์ ๋ฐ์ด๋๋ฆฌ ์ฝ๊ธฐ ์ต์ ํ
- tf.data.AUTOTUNE ๋ฐ .prefetch()๋ฅผ ํ์ฉํ Software Pipelining ๊ตฌ์ถ์ผ๋ก CPU-TPU ๊ฐ Data Starvation ๋ฐฉ์ง
์ค์ฒ ํฌ์ธํธ
- TPU ์ฌ์ฉ ์ Global Batch Size๋ฅผ ํ๋ํ์ฌ Systolic Array ํ์ฉ๋๋ฅผ ๋์๋๊ฐ - .prefetch()์ tf.data.AUTOTUNE์ ํตํด TPU๊ฐ CPU์ ์ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ ํด ์๊ฐ์ด ์๋๊ฐ - ๋ค๋์ ์์ ํ์ผ์ TFRecord ํํ์ ๋ฐ์ด๋๋ฆฌ ํฌ๋งท์ผ๋ก ๋ณํํ์ฌ I/O ๋ณ๋ชฉ์ ์ ๊ฑฐํ๋๊ฐ - XLA ์ปดํ์ผ๋ฌ๊ฐ ์ ์ฉ ๊ฐ๋ฅํ ์ฐ์ฐ ๊ตฌ์กฐ๋ก ๋ชจ๋ธ์ ์ค๊ณํ๋๊ฐ