Cloud TPU Pods: AI Supercomputing for Large Machine Learning Problems (Google I/O'19)

[음악 재생] 마틴 고너 : 안녕하세요 모두와 주셔서 감사합니다

아침 8시 30 분에이 세션에 오신 것을 환영합니다 TPUs 및 TPU 포드에 대해 따라서 맞춤 제작 된 가속기입니다 Google이 기계 학습을 가속화하도록 설계 한 워크로드 그리고 내가 그들에 관해 모든 것을 말해주기 전에, 나와 카즈, 나는 뭔가하고 싶다 물론 이것은 라이브이기 때문에 라이브 데모를보고 싶습니다

그리고 무대 위에 서서 여기서 훈련하고 싶습니다 그 큰 모델 중 하나 인 TPU 포드 옛날에 기차를 타고 가곤 했었어 그리고 우리가 훈련을 끝낼 수 있는지 알게 될 것입니다 이 세션에서 그래서 훈련을 시작하겠습니다 나는 여기서 내가하고있는 것을 정확히 설명 할 것이다

나는 지금 막 시작하고있다 모든 셀을 실행하십시오 달리고있는 것 같습니다 좋아, 그냥 확인 중이 야 128 코어 TPU 포드에서 실행하고 있습니다

그래서 로그에서 볼 수있는 것들 중 하나가 여기에 있습니다 모든 TPUs가 나타나기 때문입니다 0, 1, 2, 6 및 128까지 줄입니다 좋아, 그럼 이거 달리기 야 나는 그것에 만족한다

TPUs에 대해 더 많이 들어 봅시다 우선 실리콘 조각은 무엇입니까? 그리고 이것은 내가 시작한 데모입니다 그것은 객체 감지 데모입니다 300,000 이미지의 야생 동물 데이터 세트에 대한 교육입니다 왜 야생 동물인가? 너에게 귀여운 팬더를 보여줄 수 있기 때문에

그리고 귀여운 전자 제품을 보여줄 수 있습니다 그래서 이것은 TPU v2입니다 그리고 두 번째 버전 인 TPU v3가 있습니다 그것들은 꽤 큰 보드입니다 이것은 거대합니다

보시다시피, 칩 위에 4 개의 칩이 있습니다 각 칩은 듀얼 코어이므로 이러한 보드 각각 그것들에 8 개의 TPU 코어가 있습니다 각 코어에는 두 개의 유닛이 있습니다 그것은 벡터 처리 단위입니다 이것은 상당히 표준적인 데이터 지향적 인 프로세서이며, 범용 프로세서

기계 학습을 위해 특별하게 만드는 이유 행렬 곱셈 단위입니다 TPU에는 하드웨어 기반 매트릭스가 내장되어 있습니다 한 번에 128 x 128 행렬에 곱할 수있는 승수 그렇다면이 아키텍처에 대한 특별한 점은 무엇입니까? 우리가 사용한 두 가지 트릭이 있습니다 신속하고 효율적으로 만들 수 있습니다

첫 번째는 준 표준이라고 할 수 있습니다 정밀도가 떨어졌습니다 신경망을 훈련 할 때 정밀도가 떨어집니다 32 비트 부동 소수점에서 16 비트로 사람들이 아주 자주하는 일입니다 신경 네트워크가 손실에 상당히 저항하기 때문에 정밀도

실제로, 심지어 때로는 발생합니다 감소 된 정밀도로 인해 발생하는 잡음 일종의 정규화 자 역할을하며 융합을 돕습니다 때로는 정확도를 떨어 뜨릴 때 운이 좋은 경우도 있습니다 그러나이 차트에서 볼 수 있듯이 float16과 float32, 부동 소수점 형식, 그들은 같은 번호가 없습니다 지수 비트의 동일한 범위를 커버하지 마십시오 따라서 모델을 가져와 모든 float32를 다운 그레이드 할 때 float16s에, 당신은 언더 플로우 또는 오버플로에 들어갈 수도 있습니다 문제

그리고 그것이 당신의 모델이라면, 그것은 보통 없습니다 들어가서 고치기가 너무 힘듭니다 하지만 GitHub의 코드를 사용하고 있다면 너는 물건을 고칠 곳을 모른다 이것은 매우 문제가 될 수 있습니다 그래서 TPUs에서 우리는 다른 것을 선택했습니다

실제로 우리는 다른 부동 소수점을 설계했습니다 형식은 bfloat16입니다 보시다시피, 실제로는 분수 비트 만있는 float32와 정확히 동일합니다 끊다 그래서 요점은 정확히 같은 숫자입니다

지수 비트의 정확히 같은 범위 따라서 일반적으로 드롭 인 대체품입니다 float32 및 정밀도 감소 그래서 보통 당신을 위해, 아무것도 없습니다 당신의 모델에서 감소 속도의 혜택을 누리기 위해해야 ​​할 일 정도

TPU는 자동으로, 선박에서, 하드웨어에서 두 번째 요령은 건축입니다 이 행렬 곱셈 단위의 설계입니다 어떻게 작동하는지 이해하면 머리 속에서 행렬을 수행하는 방법을 그림으로 그려보십시오 곱셈

결과 하나, 결과 하나 매트릭스, 학교에서 미적분을 기억하려고, 점 제품입니다 한 행의 한 행과 한 행의 내적 제 2 매트릭스의 이제 내적 제품이란 무엇입니까? 내적은 일련의 곱셈 – 누산 연산이며, 이 말은 당신 만이 행렬 곱셈을 수행 할 필요가있다 곱셈되고 누적된다 그리고 16 비트로 곱셈 – 누산하고, 왜냐하면 우리는 bfloat16을 사용하여 정밀도를 줄 였기 때문입니다 그것은 작고 작은 실리콘 조각입니다

16 비트 곱셈 누적 기는 아주 작은 실리콘 조각입니다 그리고 당신이 여기에있는 것처럼 어레이로 함께 묶는다면 따라서 실생활에서 이것은 128 x 128 배열 일 것입니다 그것은 수축기 배열이라고 불립니다 수축기는 그리스어로 흐름을 의미합니다

데이터를 통해 데이터를 전달하기 때문입니다 그래서 작동하는 방식은 하나의 행렬을 배열에로드하는 것입니다 그런 다음 배열을 통해 두 번째 행렬을 흐르게합니다 그리고 날 믿어야 해, 아니면 애니메이션 작업에 약간의 시간을 할애하고, 회색 점이 끝날 때까지 그 곱셈 – 누산기를 통해 흐르는, 오른쪽의 모든 점 제품은 결과 행렬을 만듭니다 그래서 이것은 원 샷 조작입니다

어디에도 저장할 수있는 중간 값이 없으며 메모리, 레지스터에 모든 중간 값이 와이어에 흐른다 하나의 계산 단위에서 두 번째 계산 단위로 매우 효율적입니다 그리고 무엇보다, 그것은 단지 만들어졌습니다

그 작은 16 비트 곱셈 누적 기, 이는 우리가 많은 것을 하나의 칩에 넣을 수 있음을 의미합니다 128 x 128은 16,000 개의 다중 누산기입니다 그리고 그것이 하나의 TPU 코어에 얼마나 많이 들어가는 지, 두 배입니다 2 개의 TPU 코어 이것이 이것이 밀도를 높여주는 이유입니다

밀도는 전력 효율성을 의미합니다 또한 데이터 센터의 전력 효율성은 비용을 의미합니다 그리고 물론, 당신은 얼마나 싸구려인지 알고 싶습니다 또는 이러한 것들이 얼마나 빠릅니다 작년부터 기억할 수도있는 사람들이 있습니다

나는 내가 만든 것을 말하며,이 평면 모델, 그래서 저는 이것을 오늘 벤치 마크로 사용하고 있습니다 Google Cloud의 AI 플랫폼에서 다른 구성을 얻는 것은 매우 쉽습니다 그래서 나는이 기차가 얼마나 빨리 테스트 할 수 있습니다 저의 기준은 빠른 GPU에서이 모델입니다 4 시간 반 만에 열차를 탄다

하지만 강력한 GPU를 갖춘 5 대의 컴퓨터를 사용할 수도 있습니다 클러스터에서 그리고 5 대의 머신에서 5 개의 GPU, 이 모델은 한 시간 안에 훈련 할 것입니다 그리고 1 시간이 정확히 있기 때문에이 번호를 선택했습니다 이 모델이 하나의 TPU v2에서 훈련하는 데 걸리는 시간

엄지 손가락의 규칙 때문에 기억하고 싶습니다 4 개의 칩을 가진 대략 1 TPU v2이고, 대략 5 개의 강력한 GPU와 비슷합니다 그것은 속도 측면에서입니다 그러나 보시다시피, 거의 3 배 저렴합니다 이것이 아키텍처 최적화의 요점입니다

특히 신경망 작업 부하에 적합합니다 이 기능이 소프트웨어에서 어떻게 작동하는지 알고 싶을 수도 있습니다 따라서 TensorFlow에서 TensorFlow 또는 Keras를 사용하는 경우, 귀하의 파이썬 코드 TensorFlow 파이썬 코드 전산 그래프를 생성합니다 그것이 TensorFlow가 작동하는 방법입니다 따라서 전체 신경망은 그래프로 표현됩니다

이제,이 그래프가 TPU로 전송됩니다 TPU는 파이썬 코드를 실행하지 않습니다 이 그래프는 XLA, Accelerated Linear 대수학 컴파일러, 그게 어떻게 TPU에서 실행될 TPU 마이크로 코드가됩니다 그리고이 아키텍처의 한 가지 좋은 부작용 TensorFlow 코드에서, 표준 tfdata

DataSet을 통해 데이터를로드합니다 API, 필요한 경우, TPU와 함께 필요한 경우 심지어 데이터로드 부분 또는 이미지 크기 조정 또는 기타 데이터 파이프 라인에 있고, 그래프에서 끝나고, TPU에서 실행된다 TPU가 Google Cloud Storage에서 데이터를 가져옵니다 훈련 중 직접 그래서 매우 효율적입니다

실제로 이것을 코드로 어떻게 작성합니까? Keras에서 보여 드리죠 그리고주의해야 할 것은 TensorFlow 114의 Keras입니다 이 다음 날에 있어야합니다 API는 TensorFlow 1

13에서 약간 다릅니다 오늘은 오히려 너에게 그걸 보여줄거야 새로운 것, 내일 또는 다음 주 현재로 그래서 그것은 몇 줄의 코드 일뿐입니다 첫 번째 줄 TPUClusterResolver가 있습니다

대부분의 플랫폼에서는 매개 변수없이 호출 할 수 있습니다 연결된 TPU를 찾습니다 TPU는 원격으로 연결된 가속기입니다 이것은 그것을 찾습니다 TPU를 초기화 한 다음 새 배포판을 사용합니다

이 TPU를 기반으로 TPU 전략을 정의하는 TensorFlow의 API 그리고 전략으로 말하면됩니다 스코프, 뒤에 오는 모든 것은 완벽하게 정상적인 Keras 코드입니다 그런 다음 모델을 정의하고 컴파일하고, 당신은 modelfit, modelevaluate, model

predict, 네가 Keras에서하는 일은 뭐니? 그래서 Keras에서 이것은 문자 그대로이 네 줄의 코드입니다 추가하려면 – TPU에서 일하기 그리고이 4 줄의 코드 또한 모델을 분산 모델로 변환합니다 하나의 GPU조차도 TPU를 기억하십시오 8 개의 코어가있는 보드입니다

그래서 가서 분산 컴퓨팅입니다 그리고이 네 줄의 코드가 제자리에 놓였습니다 당신을위한 분산 컴퓨팅의 모든 기계류 통지 할 하나의 매개 변수 TPU 전략에서 볼 수 있습니다

steps_per_run은 100입니다 그래서 이것이 최적화입니다 이것은 TPU에게 알려주고 100 회분의 교육을 실행하십시오 끝날 때까지 다시보고하지 마세요 네트워크 연결 가속기이기 때문에, TPU가 다시보고하기를 원하지 않는다

성능상의 이유로 각 배치 후에 이것이 바로 소프트웨어입니다 자신의 코드를 작성하고 싶지 않으면, 나는 그렇게하도록 권합니다 하지만 그렇지 않으면 우리는 도서관 전체를 가지고 있습니다 TPU 최적화 모델의 그래서 TensorFlow / tpu GitHub에서 찾을 수 있습니다

저장소 이미지에 모든 것이 있습니다 비전 공간에서, 기계 번역에서, 언어 및 NLP 공간을 음성 인식에 사용합니다 GaN 모델로도 게임을 즐길 수 있습니다 우리가 무대에서 시연하고있는 것, 지금 RetinaNet이 모델을 훈련하고 있다는 것을 기억하십시오

그래서 이것은 하나의 물체 탐지 모델입니다 그리고 저는이 모델을 좋아해요 어떻게 작동하는지 물체 감지에서 이미지를 넣고 얻을 수있는 것 그냥 라벨이 아니야 여긴 개야,이 팬더 야

하지만 실제로 그 객체가있는 곳에 상자가 생깁니다 물체 감지 모델에는 두 가지 종류가 있습니다 원샷 감지기가 있습니다 일반적으로 빠르지 만 종류가 정확하지 않습니다 그 다음 훨씬 더 많은 2 단 검출기 정확하지만 훨씬 느립니다

그리고 나는 RetinaNet을 좋아합니다 왜냐하면 그들은 실제로 이것을 가장 빠른 방법으로 찾았다 그리고 당신이 할 수있는 가장 정확한 모델 오늘날의 물체 감지에서 찾아보십시오 그리고 그것은 매우 간단한 속임수입니다 나는 그 뒤에있는 모든 수학을 설명하지 않을거야

기본적으로 이러한 탐지 모델에서, 당신은 후보 탐지로 시작합니다 그리고 탐지를 찾아 내기 위해 잘라냅니다 상자 안에 실제 물건이 들어있는 상자 그리고 그 점은 당신이 보는 파란 상자들, 그들에게는 아무것도 없다 그래서 훈련 중에도 그들은 매우 쉽게 보이지 않는 것으로 분류되고 상자를 따라 이동하며, 아주 작은 오류

그러나 당신은 그들 중 많은 것을 가지고있다 이 모델의 손실을 계산할 때, 손실에서 아주 작은 오류가 아주 많습니다 그리고 그 엄청난 양의 아주 작은 오류들이 결국에는 매우 커야하며 유용한 신호를 압도합니다 그래서 2 단 검출기는 그 후보 상자에 대해 훨씬 더주의를 기울임으로써 1 단 검출기에서, 당신은 시작합니다 다수의 후보 상자가 있습니다

RetinaNet에서 발견 한 트릭 손실에 조금 수학 트릭입니다 모든 사람의 기여가 그 쉬운 상자는 작게 유지됩니다 결과는 빠르고 정확합니다 그래서 내가 다시 여기로 가게 해줘 나는 실제로 내가 한 일에 대해 정확히 말하고 싶다 정확히 말하면, 이 데모를 시작했을 때

저는 여러분 대부분이 Google Cloud Platform에 익숙하다고 생각합니다 그래서 여기에 Google Cloud Platform 콘솔이 열립니다 Google Cloud Platform에서는 나는 AI 플랫폼이라는 도구를 가지고 있는데, 그것을 아는 사람들에게는 훈련을위한 시설이 있습니다 작업을 수행하고 REST API 뒤에 모델을 배치하는 방법 봉사를 위해 하지만 노트북이라는 새로운 기능이 있습니다

AI 플랫폼에서 모든 설치 준비가 완료되었습니다 작업을위한 노트북 – 그래, 그럼 이걸로 바꾸자 TensorFlow, PyTorch에서는 GPU를 사용합니다 문자 그대로 클릭 한 번으로 작동합니다 새로운 인스턴스, TensorFlow 인스턴스가 필요합니다

Jupyter 노트북이 설치된 상태에서 얻은 정보 실행중인 인스턴스이지만 링크가있는 인스턴스입니다 Jupyter를여십시오 예를 들어, 이건 그리고 그것은 Jupyter를 열 것입니다, 하지만 이미 열려있어 그래서 다른 것을 선택하라고 요구하고 있지만, 여기 있습니다 그리고 여기서, 당신은 실제로 정상적으로 일할 수 있습니다 Jupyter 환경에서 강력한 가속기를 사용하십시오 내가 TPU를 가지고 있지 않다는 것을 눈치 챘을 것입니다

옵션, 실제로 여기에,하지만 여기, 가속기 추가 용 그게 다가올거야 하지만 여기에서는 Jupyter 노트북 인스턴스를 사용하고 있습니다 TPU v3 128 코어 포드에 의해 전원이 공급됩니다 나는 그것을 어떻게 했는가? 명령 행에서 실제로 가능합니다

여기에 명령 줄을 알려 줘 거기에 대해서는 아무 것도 없습니다 하나의 gcloud 계산 명령 행이 있습니다 인스턴스로 시작하고 두 번째 gcloud 계산 명령 라인을 눌러 TPU를 시작하십시오 가상 시스템처럼 TPU를 프로비저닝합니다

Google의 클라우드 이것이 내가 한 일입니다 바로 지금 실행중인 것입니다 그래서 우리가 무엇인지 보자 여기 아직 실행 중입니다 보시다시피 다음 100 배치를 대기열에 넣으십시오

그리고 그것은 훈련입니다 대략 6,000 명 중 4,000 명이 단계입니다 세션의 끝에서이 데모를 다시 확인하겠습니다 이 데모는 내가 그것을 할 때, 무대에서 그것을 실행하기 위해, 나는 또한 우리가 얼마나 빨리 TPU v3 대 v2s 이론적으로 v3는 v2보다 약 2 배 강력합니다

하지만 당신이 충분히 먹이면 효과가 있습니다 모든 하드웨어를 사용하도록 노력하십시오 레티 나 넷 (RetinaNet)에서는 훈련이 가능합니다 다양한 크기의 이미지에 물론, 작은 이미지를 훈련하면 256 픽셀 이미지, 그것은 훨씬 더 빠를 것이다

초당 이미지의 관점에서 그리고 나는 둘 다 시도했다 TPU v2s 및 v3s 당신은 작은 이미지를 볼 수 있습니다, 당신은 약간의 충돌을 얻을 성능은 TPU v3에서 나오지만, 거의 2 배가되지는 않습니다 그러나 당신이 더 크고 더 큰 심상에 도착할 때, 당신은 더 많은 일로 하드웨어를 먹이고 있습니다

640 픽셀 이미지에서 TPU v3의 속도를 높입니다 이론적 인 x2 인자에 가까워지고있다 이런 이유로이 데모를 여기서 실행하고 있습니다 TPU v3 포드의 512 픽셀 이미지 크기 나는 포드에 대해서 이야기하고있다

하지만 정확히이 포드는 무엇입니까? TPU 포드에 대해 자세히 알려면 Kaz에게 lectern를주고 싶다 Kaz 감사합니다 KAZ SATO : 고마워, 마틴 [박수 갈채] 따라서 필자는 클라우드 TPU 포드를 직접 소개합니다 꼬투리는 무엇입니까? 클라우드 TPU의 대규모 클러스터입니다

이제 버전 2 포드는 공개 베타 버전으로 제공됩니다 512 TPU 코어가있는 116 페타 플롭을 제공합니다 차세대 버전 3 포드 공개 베타 버전이기도합니다 2,048 TPU 코어가있는 100 페타 플롭스 이상 그 성능 수치는 가장 높은 수치입니다

슈퍼 컴퓨터 따라서 클라우드 TPU 포드는 AI 슈퍼 컴퓨터입니다 Google이 처음부터 만들었습니다 그러나 여러분 중 일부는 생각할 수도 있습니다 한 무리의 TPU 인스턴스와 클라우드 간의 차이점 TPU 포드? 차이점은 상호 연결입니다

Google은 초고속 상호 연결을 개발했습니다 슈퍼 컴퓨터 기술에서 파생 된 하드웨어, 매우 짧은 대기 시간으로 수천 개의 TPU를 연결합니다 그것은 당신을 위해 무엇을합니까? 애니메이션에서 볼 수 있듯이 업데이트 할 때마다 단일 TPU상의 단일 파라미터, 다른 모든 수천과 동기화됩니다 하드웨어에 의해 즉각적으로 TPUs의 즉, TensorFlow 사용자는 전체 포드를 사용할 수 있습니다

수천 대가있는 거대한 단일 기계 그 안에 TPU 코어의 단일 컴퓨터를 사용하는 것만 큼 쉽습니다 AI 슈퍼 컴퓨터이기 때문에 궁금해 할 것입니다 당신은 또한 최고 높은 비용을 취할 수 있습니다 그러나 그렇지 않습니다 TPU 창을 사용하여 시작할 수 있습니다

32 코어를 초기 비용없이 시간당 24 달러로 제공합니다 따라서 수백만 달러를 지불 할 필요가 없습니다 자신의 수퍼 컴퓨터를 처음부터 만들 수 있습니다 클라우드에서 몇 시간 동안 임대 할 수 있습니다 버전 3 포드는 32 코어로 프로비저닝 될 수 있습니다

시간당 32 달러에 불과합니다 크기가 더 큰 경우 서비스 담당자에게 문의하십시오 가격 책정 GPU를 통한 TPU 포드의 비용 이점은 무엇입니까? 여기에 비교 결과가 있습니다 가득 차있는 버전 2 포드로, 512 TPU 코어를 사용하면 동일한 ResNet-50 모델을 교육 할 수 있습니다 38 배 저렴한 비용으로 27 배 빠른 속도

이것은 TPU 포드의 명확한 이점을 보여줍니다 일반적인 GPU 기반 솔루션 TPU 포드에서 얻을 수있는 다른 이점도 있습니다 이베이의 경우를 살펴 보겠습니다 eBay에는 10 억 가지 이상의 제품 목록이 있습니다 특정 제품을 더 쉽게 검색 할 수 있도록 10 억 개 제품에서 새로운 시각적 검색 기능을 구축했습니다 특색

그리고 모델을 훈련시키기 위해, 그들은 5500 만 개의 이미지를 사용했습니다 그래서 그들에게는 정말 대규모 훈련입니다 그리고 그들은 Cloud TPU 포드와 eBay를 사용했습니다 100 배 빠른 교육 시간을 얻을 수 있었고, 기존 GPU 서비스에 비해 또한 10 %의 정확도 향상 효과도 얻을 수 있습니다 그게 왜? TPU 자체가 정확성을 높이기 위해 설계되지 않았습니다

그 정도 그러나 당신이 훈련 속도를 증가시킬 수 없기 때문에 10 배 또는 100 배, 즉 데이터를 의미합니다 과학자 또는 연구원은 100 배 더 많은 10 배를 가질 수 있습니다 시도 같은 반복을위한 반복 하이퍼 파라미터의 다른 조합 또는 다른 전처리 등등 따라서 eBay의 경우 정확도가 10 % 이상 향상되었습니다

어떤 종류의 TensorFlow 코드를 보자 당신은 TPU 포드로부터 그 이익을 얻기 위해 글을 쓸 것입니다 그리고 실제 코드를 살펴보기 전에, 나는 되돌아 보려고 노력한다 과거에 필요한 노력은 무엇 이었습니까? 대규모 분산 교육을 구현하려면? 단일 컴퓨터에 많은 GPU 또는 TPU 사용 즉, 소위 분산 형 교육이라고합니다 그리고 두 가지 방법이 있습니다

하나는 데이터 병렬이고 다른 하나는 모델 병렬입니다 우선 데이터 병렬에 대해 이야기 해 봅시다 다이어그램에서 볼 수 있듯이 데이터가 병렬 인 경우, 교육 데이터를 여러 GPU로 분할해야합니다 또는 TPU 노드 또한 모델과 동일한 매개 변수 세트를 공유해야합니다

그렇게하기 위해서는 GPU 또는 TPU 클러스터를 설정해야합니다 혼자서 또한 매개 변수 서버를 설정해야합니다 매개 변수의 모든 업데이트를 공유합니다 모든 GPU 또는 TPU 중에서 따라서 복잡한 설정입니다

그리고 많은 경우에, 당신은 – 동기화 오버 헤드가 발생할 것입니다 수백이나 수천 명의 사람들이 있다면 단일 클러스터에있는 TPU 또는 GPU 중 그 일은 엄청난 오버 헤드가 될 것입니다 그리고 그것은 확장 성을 제한합니다 하지만 TPU 포드로 하드웨어가 처리합니다 고속 인터커넥트가 동기화됩니다

단일 TPU의 모든 매개 변수 업데이트 다른 수천 개의 TPU가 순식간에 매우 짧은 대기 시간 따라서 매개 변수 서버를 설정할 필요가 없습니다 또는 대형 GPU 클러스터를 설정할 필요가 없습니다 혼자서 또한 거의 선형적인 확장 성을 얻을 수 있습니다

귀하의 교육에 더 많은 TPU 코어를 추가하십시오 마틴은 실제 확장 성을 보여줄 것입니다 나중에 결과 앞서 언급했듯이 TensorFlow 사용자 전체 TPU 포드를 하나의 거대한 컴퓨터로 사용할 수 있습니다 그 안에 수천 개의 TPU 코어가 있습니다

따라서 단일 컴퓨터를 사용하는 것만 큼 쉽습니다 예를 들어 Keras 코드가 단일 TPU에서 실행되는 경우, 또한 변경없이 2,000 TPU 코어에서 실행됩니다 마틴이 이전에 보여준 것과 정확히 같은 코드입니다 따라서 데이터의 모든 복잡성 평행 훈련, 예를 들어 훈련 분리 데이터를 여러 개의 TPU에 저장하거나 공유 동일한 매개 변수는 모두 TPU 포드 (pods)의 상호 연결 (interconnect) XLA 컴파일러 및 새로운 TPUStrategy TensorFlow 114의 API 바꿀 수있는 한 가지는 배치 크기입니다

마틴이 말했듯이, TPU 코어는 매트릭스 프로세서 이것은 128 x 128 매트릭스 곱셈기를가집니다 그래서 보통, 당신은 최고의 성능을 얻을 것입니다 배치 크기를 TPU의 128 배로 설정함으로써 코어 10 개의 TPU 코어가 있다면 1,280이 될 것입니다 TPU 포드의 장점은 교육 시간 뿐만이 아닙니다 또한 거대 모듈의 교육을 가능하게합니다

메쉬 TensorFlow를 사용하여 데이터 병렬은 분산 된 교육의 보편적 인 방법이었습니다 하지만 한 가지 단점이 있습니다 그것은 큰 모델을 훈련시킬 수 없다 모든 부서가 모든 GPU와 공유되기 때문에 또는 TPUs를 사용하면 적합하지 않은 큰 모델을 가져올 수 없습니다 하나의 GPU 또는 TPU의 메모리에 저장합니다

그래서 분산 교육이라는 또 다른 방법이 있습니다 병렬 모델 병렬 모델을 사용하면 거대한 모델을 분리 할 수 ​​있습니다 여러 GPU 또는 TPU에 훨씬 더 큰 모델을 훈련시킬 수 있습니다 그러나 그것은 대중적인 방법이 아니었다

왜? 구현하기가 훨씬 어렵 기 때문입니다 다이어그램에서 볼 수 있듯이 모든 통신을 구현해야한다 모델의 일부분 사이 그것은 모델 사이에 바느질과 같습니다 그리고 다시 복잡한 클러스터를 설정해야합니다

많은 경우에 커뮤니케이션 모델 사이 수십만 명이 있다면 CPU 또는 GPU 또는 TPU 코어의 그 큰 오버 헤드가 될 것입니다 그렇기 때문에 모델 병렬 모델은 그렇지 않습니다 너무 인기가있어 이러한 문제를 해결하기 위해 TensorFlow 팀 Mesh TensorFlow라는 새로운 라이브러리를 개발했습니다

이것은 분산 된 교육의 새로운 방식입니다 다수의 컴퓨팅 노드들과 함께, TPU 포드, 다중 GPU 또는 다중 CPU와 같은 여러 가지 기능을 제공합니다 TensorFlow는 추상화 계층을 제공합니다 이러한 컴퓨팅 노드를 논리적 n 차원 망사 Mesh TensorFlow는 이제 오픈 소스로 사용할 수 있습니다

코드는 TensorFlow GitHub 저장소에 있습니다 이미징에서 어떻게 작동하는지 보려면, 당신은 간단한 신경 네트워크를 가질 수 있습니다 이것은 MNIST 모델을 인식하기위한 것입니다 이 네트워크의 배치 크기는 512, 및 데이터 차원을 784로 정의하고, 하나의 숨겨진 계층 100 개의 노드로 구성되며 10 개의 클래스로 출력됩니다 그리고 당신이 그 모델로 그 네트워크를 훈련시키고 자한다면 병렬, 당신은 단지 지정할 수 있습니다, 나 매개 변수를 4 개의 TPU로 분할하여 메쉬로 분할하려고합니다

TensorFlow, 그게 전부 야 당신은 어떻게 생각할 필요가 없습니다 분할 모델 간의 통신 구현 통신 오버 헤드에 대해 걱정할 필요가 있습니다 어떤 종류의 코드를 작성할 것입니까? 다음은 모델 병렬을 사용하는 코드입니다 처음에는 치수를 정의해야합니다

데이터와 모델 모두의 이 코드에서는 배치 치수를 512로 정의하고, 데이터의 크기는 784 개이며, 숨겨진 레이어에는 100 개의 노드와 10 개의 클래스가 있습니다 그런 다음 자신의 네트워크를 정의합니다 두 세트의 가중치와 같은 Mesh TensorFlow API를 사용하여 하나의 숨겨진 레이어, 그리고 하나의 로그와 손실 함수, 이러한 차원을 사용하여 마지막으로 메쉬에있는 TPU 또는 GPU의 수를 정의하고, 그리고 당신이 사용하고자하는 레이아웃 규칙은 무엇입니까? 이 코드 예제에서는 숨겨진 레이어를 정의하고 있습니다 모형 매개 변수를 4 개로 분할하기위한 치수 TPUs 그리고 그게 다야

Mesh TensorFlow가이 코드를 살펴볼 수 있도록 자동으로 모델 매개 변수를 4 개로 나눕니다 TPUs 그리고 모든 TPUs와 동일한 교육 데이터를 공유합니다 데이터와 모델을 병렬로 결합 할 수도 있습니다 예를 들어 다음과 같이 2D 메쉬를 정의 할 수 있습니다

그리고 당신은 메쉬의 행을 데이터 병렬로 사용합니다 메쉬 또는 모델 병렬의 열을 사용하고, 그래서 당신은 그들 모두로부터 이익을 얻을 수 있습니다 Mesh TensorFlow를 사용하여 쉽게 정의 할 수 있습니다 배치 크기를 지정할 수 있습니다 열에 대한 열 및 숨겨진 레이어 크기 이것은 메쉬를 사용하는 예제입니다

트랜스포머 모델 교육을위한 TensorFlow 트랜스포머 모델은 매우 대중적인 언어 모델입니다 나는 변압기 모델에 대해 더 깊이 들어 가지 않습니다 하지만 알 수 있듯이지도 작성이 매우 쉽습니다 변환기 모델의 각 계층 메쉬 TensorFlow의 레이어로드 대형 데이터와 대형 모델을 효율적으로 매핑 할 수 있습니다

수십만 개의 TPU 코어에 통합 메쉬 TensorFlow를 사용하여 그렇다면 이점은 무엇입니까? TPU 포드와 함께 실행되는 Mesh TensorFlow를 사용하면, Google AI 팀이 언어 모듈을 교육 할 수있었습니다 및 10 억 단어 규모의 번역 모델을 제공합니다 그리고 그들은 최첨단 점수를 얻을 수있었습니다 그 번호에서 볼 수 있듯이

따라서 사용 사례의 경우 모델이 클수록 당신이 얻는 정확성 TPU 포드와 평행 한 모델은 큰 장점을 제공합니다 그 최첨단 점수를 달성하는 데 도움이됩니다 대규모 모델의 또 다른 활용 사례를 살펴 보겠습니다 병렬 난 그냥 BigGAN 전화

그리고 나는 GAN이 무엇인지 GAN이 어떻게 작용하는지 더 깊이 생각하지 않습니다 그러나 여기에 기본적인 아이디어가 있습니다 두 개의 정의 된 네트워크가 있습니다 하나는 discriminator D라고하고 다른 하나는 생성기 G라고합니다 그리고 손실 함수를 정의합니다

D가 이미지인지 아닌지를 인식하도록 훈련되어야한다 가짜 이미지 또는 실제 이미지 동시에 발전기가 훈련 될 것입니다 D가 찾을 수 없도록 현실적인 이미지를 생성한다 그것은 가짜입니다

그것은 당신이 그 두 사람과 놀고있는 미니 맥스 게임과 같습니다 네트워크 그리고 결국에는 일반 G 사진 사실적인 가짜 이미지를 생성 할 수 있습니다 인공 이미지 데모 비디오를 살펴 보겠습니다

그래서 이것은 큰 스포일러가 아닙니다 나는 이미 더 큰 모델을로드했다 그것은 TPU 포드에서 훈련되었습니다 보시다시피 이들 모두입니다 인공 합성 이미지를 고품질로

카테고리를 지정할 수도 있습니다 타조와 같은 생성 된 이미지의 타조 이미지를 생성 할 수 있습니다 이것들은 모두 합성 인공 이미지입니다 그들 중 누구도 진짜가 아닙니다 그리고 BigGAN은 소위 잠재 공간을 가질 수 있기 때문에 그 이미지를 생성 할 씨앗이 있고, 당신은 두 개의 씨앗 사이를 삽입 할 수 있습니다 이 예제에서는 보간 중입니다

골든 리트리버와 라사 사이 그리고 다른 조합을 시도해 볼 수 있습니다 보간의 서쪽 고지 화이트 테리어 골든 리트리버 다시 말하지만, 모두 가짜 이미지입니다 그래서이 더 큰 모델은 TPU 버전 3으로 훈련되었습니다

포드 512 코어 그리고 그것은 24 시간에서 48 시간이 걸렸습니다 왜 BigGAN이 그렇게 많은 TPU 코어와 오랜 시간이 걸리는지? 이유는 모델 크기와 배치 크기입니다 GAN 모델에 의해 측정 된 GAN 모델의 품질은, 시작 점수 또는 IS 점수로 측정됩니다 그것은 얼마나 많은 초기 모델을 나타냅니다 그 이미지가 진짜라고 생각합니다

또한 생성 된 이미지의 다양성을 나타냅니다 BigGAN 신문에 따르면 당신이 가지고있을 때 더 좋은 IS 점수 모델의 더 많은 매개 변수 및시기 더 큰 배치 크기를 사용하고 있습니다 즉, 더 큰 스케일의 모델은 병렬입니다 수백 개의 TPU 코어에서 BigGAN 모델에 필수적입니다 생성 된 이미지의 품질을 향상시킬 수 있습니다

그래서 두 가지 유스 케이스를 보았습니다 BigGAN 유스 케이스 및 언어 모델 유스 케이스 그리고 그 모델의 첫 번째 응용 프로그램입니다 TPU 포드와 평행을 이룬다 그러나 그들은 단지 시작에 불과합니다 그래서 TPU 포드는 지금부터 모든 사람들이 이용할 수 있습니다

그래서 우리는 점점 더 흥미 진진한 모습을 기대합니다 새 TPU 포드 사용자가 제공 한 사용 사례 또한 응용 프로그램에서 그래서 그것이 내 부분을위한 것입니다 마틴으로 돌아 가라 MARTIN GORNER : 이제 데모를 확인해보십시오

우리 모형이 실제로 훈련 되었습니까? 여기를 확인해 보면 훈련이 끝난 것처럼 보입니다 저장된 모델이 저장되었습니다 그래서해야 할 유일한 일은 이 모델이 실제로 뭔가를 예측할 수 있는지 확인합니다 그래서 두 번째 머신에서 똑같은 모델을 다시로드 할 것입니다 승인

나는 그것이 하나다고 믿는다 가서 다시로드하자 그래서 이번에는 훈련을 건너 뛰고 여기로 가겠습니다 추론과 로딩 죄송합니다, 죄송합니다

데모 신이 오늘 나와 함께 할 것이기를 바랍니다 괜찮아 내가 잘못된 디렉토리를로드하고 있기 때문입니다 데모 신은 나와 거의 같다 내 모델이 저장되었던 곳이 바로이 곳입니다

괜찮아 예 과연 그것은 같지 않았습니다 미안합니다

훈련도, 단지 추론도 그리고 이번에는 내 모델이로드되는 것처럼 보입니다 일단로드되면 실제로 볼 수 있는지 이미지에서 동물을 감지하면 여기 있습니다 그래서이 표범은 실제로 표범입니다 이 새는 새입니다

사자는 사자입니다 이것은 매우 까다로운 이미지입니다 그래서 나는 체리 선택 이미지가 아니라 당신을 보여주고 있습니다 이것은 무대에서 훈련 한 모델입니다 여기 있습니다

완벽한 모델은 없습니다 우리는이 같은 잘못된 탐지를 보게 될 것입니다 하지만 까다로운 문제입니다 그것은 삽화입니다 실제 사자가 아닙니다

표범이 자리하고있어 사자가 자리하고있어 그리고 권투가 실제로 아주 잘 작동하는 것을보십시오 표범은 이미지에서 완벽하게 식별되었습니다 이제 더 도전적인 것으로 넘어 갑시다

심지어이 풍선 예술품 사자가 확인되었습니다, 항상 그런 것은 아닙니다 이것은 복잡한 이미지입니다 새들의 무리 그래서 모든 것을 보지 못한다는 것을 알 수 있습니다 그러나 그들 모두는 최소한 새들입니다

그것은 꽤 좋은 직업이다 표범은 괜찮아 아, 그리고 우리가 가진 가장 복잡한 것입니다 말과 소가있다 음, 여기에 몇 가지 잘못된 탐지가 시작됩니다

물론 그 암소는 돼지가 아닙니다 내가 말했듯이, 어떤 모델도 완벽하지 않습니다 하지만 여기 호랑이는 호랑이입니다 우리 두 개의 귀여운 판다 있어요 그리고 그 2 개의 귀여운 팬더는 실제로 아주 어렵다

아기 팬더이기 때문입니다 그리고 저는이 모델이 300,000 이미지 데이터 세트에 많은 아기 동물이 있습니다 그래서 두 팬더를 찾을 수있어서 기쁩니다 그래서 뒤로 물러서서, 너를주는 것으로 끝내자 해당 모델에 대한 몇 가지 피드와 속도

그래서 여기에서이 모델은 RetinaNet 50 백본을 가지고 있습니다 박스를 생성 한 모든 감지 레이어를 더한 것입니다 그리고 우리는 128 코어를 가진 TPU v3 포드에서이를 교육했습니다 20 분 안에 끝났어 당신은 저를 믿을 필요가 없습니다

보여 드리죠 여기 타이머를 내 대본을 읽도록했습니다 19 분 18 초 그래서 나는 속이고 있지 않습니다 이것은 살아 있었다

그러나 나는 또한이 모델을 작은 포드에서 실행할 수 있습니다 사실, TPU v2-32에서 시도했습니다 이 차트에서이 축의 속도를 볼 수 있습니다 이 축의 시간 이것은 TPU v2-32가 실제로는 당신을 보여주는 것입니다 갖고있는 매우 유용한 도구

우리는 지금까지 거대한 모델에 대해 이야기 해왔다 그러나 이것이 거대한 모델인지 여부는 논쟁의 여지가 있습니다 이것은 1 년 전에 거대한 모델이었습니다 오늘, 더 나은 도구로, 나는 그것을 훈련시킬 수있다 상당히 겸손한 TPU v2 32 코어 포드 (pod)에서 한 시간 만에

따라서 개인 데이터 과학자 인 경우 라 할지라도, 그건 내가 쓸모있는 도구가 될 때 유용하다 나는 이런 모델에 대한 일련의 훈련을 할 필요가있다 누군가 동물 탐지 모델을 원하기 때문입니다 그리고 훈련을 1 시간으로 가져 가라 공간 또는 20 분 공간 나를 훨씬 빠르게 작업하고 훨씬 더 빠르게 반복 할 수 있습니다

hyperparemeters에, 미세 조정에, 등등 하나의 TPU v3에서 볼 수 있습니다 결론입니다 그리고 우리가 이것을 GPU에서 훈련한다면 – 처음부터 우리의 경험을 기억하십시오 하나의 TPU v2, 대략 5 GPU

따라서 1 TPU v3, 대략 10 GPU 그래서 GPU 라인은 가장 낮은 것의 10 분의 1이 될 것입니다 이 그래프의 선 간신히 거기 등록 할 것이기 때문에 나는 그것을 두지 않았다 그것은 당신에게 규모의 변화를 보여줍니다

TPU를 사용하여 모델을 교육 할 수 있습니다 이것에 대해 궁금해하실 것입니다 따라서 규모를 확장 할 때 발생할 수있는 한 가지 학습 속도 일정을 조정해야한다는 것입니다 이것은 실제로 학습 속도 일정입니다 필자는 128 코어 TPU 포드에서 모델을 교육하는 데 익숙했습니다

그럴 수도 있기 때문에 단지 몇 마디 만 당신이 본 가장 평범한 학습 속도 일정 이 경사가 있습니다 따라서 두 번째 부분은 기하 급수적 인 감소입니다 그건 상당히 표준입니다 그러나 부분적인 상승은, 우리가 ResNet-50에서 시작하여 초기화 됨 미리 훈련 된 무게로

그러나 우리는 여전히 그 무게를 훈련 가능한 상태로 두었습니다 그래서 우리는 모든 것을 훈련하고 있습니다 그것은 양도 학습이 아닙니다 사전 훈련 된 ResNet-50을 미세하게 조정하는 것입니다 그리고 네가 그렇게 할 때, 너는 훈련한다

우리가 여기에서하는 것처럼 큰 배치를 사용하여 매우 빠르며, 여기서 배치 크기는 64 배 128입니다 그래서 매우 큰 배치 크기입니다 실제로 사전 훈련 된 가중치를 깰 수도 있습니다 당신의 정밀도에 해를 끼치는 방식으로 그래서 기간을 늘리는 것이 일반적입니다

그 초기 훈련에서 네트워크, 단계, 그것이 무엇을하는지 모를 때, 정보를 완전히 파괴하지 않는다 훈련 전의 무게로 그래서 우리가 해냈습니다 우리는이 모델을 20 분 안에 무대에서 훈련 시켰습니다 그리고 데모가 효과적이었습니다

정말 기쁩니다 그래서 이것이 끝입니다 우리가 본 것은 TPUs와 TPU 포드입니다 빨리, 네 그러나 대부분 비용 효율적입니다

매우 비용 효과적인 방법과 좋은 도구 어떤 데이터 과학자도 가질 수 있습니다 또한, 특히 매우 큰 모델의 경우, 과거에는 큰 모델이었던 ResNet-50과 같은 오늘날의 정상적인 모델입니다 [알아들을 수 없는] 그것은 매우 유용한 도구입니다 그런 다음 Cloud TPU 포드를 클릭하면 데이터뿐만 아니라 모델 병렬 처리를 가능하게하고, 이 새로운 라이브러리 인 Mesh TensorFlow를 사용합니다

여기에 몇 가지 링크가있는 자세한 정보가 있습니다 더 알고 싶다면 예, 사진을 찍을 수 있습니다 더 궁금한 점이 있으시면 AI ML 포드, 빨간색, 하나의 TPU 랙 앞 그래서 이걸 라이브로 볼 수 있고 그것이 어떤 종류의 컴퓨터인지 느낀다

그리고 그걸로, 대단히 감사합니다 [박수 갈채] [음악 재생]