Building a Go AI with Kubernetes and TensorFlow

[음악 재생] DUSTIN KIRKLAND : 안녕하세요, 제 이름은 더 스틴 커클랜드입니다 저는 Google의 제품 관리자이고 저는 제 동료 중 한 명인 앤드류 잭슨 (Andrew Jackson) Google의 엔지니어, 조쉬 호크 (Josh Hoke) Google의 소프트웨어 엔지니어

그들은 꽤 흥미 진진한 모델에 대해 우리에게 말할 것입니다 Kubernetes의 상단에 훈련 그리고 그들은 현재 다른 Go AI를 교육하고 있습니다 인공 지능 게임을하는 법 배우기 알았어,이 프로젝트에 대해 조금만 생각해 보라

그리고 그것이 어떻게 시작되었는지 앤드류 잭슨 : 물론 이죠 DeepMind는 다른 알파벳 회사입니다 런던에 본사를두고 있습니다 이 논문을 쓴 연구 중심 회사 마스터 링에 대한 Nature에 발표되었습니다

트리 검색 및 심 신경 네트워크를 사용하여 이동의 게임 그리고 이것은 일종의 계시였습니다 때리는 전문적인 이동 선수가 있기 때문에 인공 지능의 오랜 목표였습니다 그것은 오랜 시간 동안오고있는 반면, 딥 블루는, 30 년 전 뭐야? 30 년 전 이었습니까? Kirkland : 더 가까이, 90 년대 앤드류 잭슨 : 오랜 시간입니다

커클랜드 : [INAUDIBLE] 앤드류 잭슨 : 20, 30 년 전에? 고 이동은 정말 먼 길을 떠난 것처럼 보였습니다 그리고 나서 아무 데나, 딥 마인드는 좋아, "오, 그런데, 우리가 그랬어" 그리고 그들은이 논문을 출판했고, 계시의 종류였습니다 그리고 내년 후반에, 나는 생각한다 그들은 서울에서 월드 챔피언 인 리 세달을 연기했다

그들은 다른 종이를 출판했다 그들은 네트워크를 훈련하지 않았다고 말했다 전문 Go Player를이기려면, 그들은 실제로 인간의 의견없이 그것을 훈련시켰다 그것은 본질적으로 무작위 잡음에서부터 시작되었다 그 자체로 놀는 법을 배웠다

미쳤어 요,이 AI가 더 나아 졌어요 앤드류 잭슨 : 그것은 첫 번째 것보다 낫습니다 환상적 이었어 [알아들을 수 없는] Kirkland : 더 환상적입니다 좋습니다, 그래서 DeepMind 팀입니다

이제 Google의 다른 그룹입니다 네가 여기서 대표하는거야 앤드루 잭슨 : 우리는 실제로 구글에있는 그룹이 아닙니다 따라서 이것은 Google의 그룹이 아니며, 이것은 부차적 인 일입니다 이것은 열정적 인 프로젝트입니다

왜냐하면 – 조셉 호크 : 20 % 프로젝트 앤드류 잭슨 : 우리는 Go Go를 좋아하는 선수들이다 Go, 우리는 AlphaGo와 대결 할 수있는 기회를 얻고 싶었습니다 물론 우리는 할 수 없었습니다 그래서 다시 작성해야했습니다 그래서 Minigo는 오픈 소스입니다

재 작성 – 나는 그것을 재 작성이라고 부르면 안된다 게시 된 작업을 기반으로 한 구현입니다 그것은 코드를 공유하지 않으며, 우리는 그 팀과 전혀 관련이 없습니다 우리는 그 팀과 관계가 없습니다 사실, 우리가 발표 된 논문을 구현할 수있다

그 결과를 시도하고 재현하십시오 그래서 이것은 일종의 재현성에서 흥미 롭습니다 결과의 관점, 또한 이것은 오픈 소스입니다 데모 그들은 정말 빠른 성능 솔루션을 구축했습니다 그것은 Google이 생각한 것처럼 실제로 Google 제품에 구워졌습니다

그래서 우리가하고 싶었던 것은 어떻게 할 수 있었는지에 대한 훌륭한 예를 제시하고자했습니다 Google Cloud 플랫폼을 사용하고 실제로 증폭하십시오 매우 제한된 개발자 리소스를 활용할 수 있습니다 시도하고 정말 놀라운 결과를 달성하기 위해 DUSTIN KIRKLAND : 좋습니다

오픈 소스 프로젝트입니다 Google에서 귀하의 20 % 시간에 구축 된, 금요일 오후에 우리가 재미있는 것들에 관해서 일할 수있는 곳 들판에 이제 이것을 KubeCon에 연결하십시오 코펜하겐의 KubeCon에 있습니다

너희들이 방금 이야기를 했니? 물론 이죠 그래서, 우리는 방금 이야기를했습니다 왜냐하면 우리가 훈련 한 전체 방법, 우리가 얻은 전체적인 방법은 Kubernetes와 함께했습니다 우리는 우리가 필요로했던이 문제를 가지고있었습니다 수백, 수천, 실제로 수백만 개의 게임을 만들 수 있습니다

일종의 강력한 모델을 얻기 위해서 그래서 우리는 무엇을 했습니까? 우리는 Kubernetes를 사용했습니다 우리는 기계 학습을 사용했습니다 앤드류 잭슨 : 그래서 우리는 그녀와 무엇을 했습니까? 기계 학습, 맞아 ANDREW JACKSON : 기계 학습

Kirkland : 네, 그래요 앤드류 잭슨 : 그것은 일종의 펀치 라인입니다 하지만 여기서 중요한 부분이 있다고 생각합니다 이것이 보강 학습이라는 것입니다 알고리즘은 훈련 할 자체 데이터를 생성해야합니다

데이터 생성은 비용이 많이 드는 부분입니다 전체 프로세스의 따라서 다른 보강 학습 응용 프로그램 이러한 시뮬레이션을 실행하는 로봇처럼 다음 데이터 반복 생성 정말 계산 상 비쌉니다 반면 Go 도메인의 경우 – Go- 매우 쉽게 병렬화 될 수있는 매우 자연스러운 방식으로 DUSTIN KIRKLAND : 이제 병렬 처리 – 지금, 여러분은 구현을 훈련시키기 위해 거대한 모델을 실행했습니다 너는 쿠 베넷을 사용하여 오케스트레이션을했다 게임의 재생

더 낫지 않습니까? 맞습니다 그래서 우리는 Kubernetes를 사용합니다 우리는 실제로 GKE- 우리는 거대한 거대한 무리를 만들었습니다 그리고뿐만 아니라 – 커클랜드 : 거인을 정의하십시오 우리가 뛰고 있다고 생각해

2000 노드처럼 말합니까? 앤드류 잭슨 : 2,000 GPU 맞아, 맞아 DUSTIN KIRKLAND : GPU 인스턴스? 맞아 그래서 우리는 기계 전체를 사용하고 있었을뿐만 아니라, 우리는 우리 모델을 훈련시키기 위해 GPU 전체를 사용하고있었습니다 앤드류 잭슨 : 네

DUSTIN KIRKLAND : 그리고이 문제는 특히 CUDA 및 GPU에 적합합니다 맞습니까? 물론 이죠 GPU에 적합한 이유입니다 우리가 기계 학습을 통해 일을하고 있기 때문입니다 모델, 신경 네트워크를 통해

수학뿐입니다 행렬 및 GPU 실제로 실제로 잘 작동하고 있습니다 행렬을 통해 Kickland : 좋아요, 그래서 각 게임 그것은 시뮬레이션 된 것입니다 각자 Kubernetes 포드에서 달렸다

컨테이너로? 맞습니다 그리고 우리는이 모든 꼬투리를 계획했습니다 모두 커뮤니티 배치 API, 작업 API, 우리는 병렬 처리 방식을 설정했습니다 Kubernetes가 방금 스케줄링을 처리했습니다 이 모든 기계에

환상적 이었어 DUSTIN KIRKLAND : 이제이 이미지를 끌어 당길 수 있습니까? 그리고 나도 몰라, 재미있는 게임 시뮬레이션을해라 내 랩톱에서 분명히 GPU가 가속되지 않습니까? 앤드류 잭슨 : 당연하지 GPU 가속 버전을 사용하는 경우 당신도 그렇게 할 수 있습니다 그것은 다른 이미지가 될 것입니다

그러나 확실히, 우리는 이것들을 사용할 수있게하십시오 이미지를 아래로 내릴 수 있습니다 실제로 이미지에 UI가 첨부되어 있습니다 그래서 당신은 실제로 그것을보고 놀 수 있습니다 그것은 당신이 그렇게 생각합니다

그것은 실제로 우리가 가지고있는 데모입니다 KIRKLAND : 저는 그것을보고 싶습니다 그렇다면 게임을 얼마나 오래 시뮬레이션 할 수 있습니까? 앤드루 잭슨 : 2 ~ 3 분 몇 분만 GPU가 없다면 꽤 오랜 시간이 걸릴 수 있습니다

ANDREW JACKSON :하지만 생각하는 정도에 달려 있습니다 맞습니다 앤드류 잭슨 : 진짜 질문입니다 잠시 생각하고 싶다면 할 수 있습니다 당신은 오랜 시간을 생각하기를 원합니다

그것은 오랜 시간이 걸릴 것입니다 당신은 그것이 매우 빨리 생각하고 오래 걸리지 않을 것입니다 그것은 당신의 선택입니다 GPU로, 아마도 게임에 몇 분 정도 걸릴 것입니다 DUSTIN KIRKLAND : 몇 분 게임

앤드류 잭슨 : 거의 모든 짐 GPU에 의해 처리됩니다 프로세서에서 실제로 수행하는 작업은 거의 없습니다 GPU 가속을 사용하는 경우 좋아, 환상적이야 나는 당신의 데모를보고 싶다 앤드류 잭슨 : 알 겠어

KIRKLAND :이 점을 말해주십시오 앤드류 잭슨 : 좋아 그래서 우리가 여기서 본 것은 우리가보고 있습니다 음, 몇 초 후에 보게 될 것입니다 나는 기다려야한다고 생각해

우리가 여기에서 보는 것은 Minigo가 생각하는 것을 볼 것입니다 알아 내려고 할거야 어떤 움직임이 재생 될지 그래서 왼쪽에서, 우리는 주요 변화를 봅니다, 그리고 그것은 단지이 움직임을 원한다고 결정했습니다 이제 내 차례가 될거야

나는 거기에서 놀거야 Minigo가 다시 생각하는 것을 볼 것입니다 그래서 거기에서 플레이하기로 결정했고 Minigo는 생각하고 있습니다 흰색은 1 개를 재생하고 검은 색은 2 개를 재생합니다 그러면 흰색이 3 번 재생됩니다

그리고 그 숫자가 돌아 다니면서, 무엇에 대해 마음이 바뀌고 있습니다 그것은 양측 모두에게 가장 좋은 결과라고 생각합니다 우리가 여기에서 보는 다른 그래프는, 그래서이 위쪽의 보드는 모델에서 발생하는 실제 추론 지금 그래서 그것들은 가능한 보드의 총 수의 1/20입니다 그것이보고있는 위치

그래서 인간이 게임을 할 때처럼 우리는 앞을 생각하고 무엇이 일어날 일을 시각화하고, 우리는 다음과 여부를 결정하려고합니다 우리는 우리가가는 곳을 좋아합니다 Minigo는 똑같은 일을하고 있습니다 최선의 선택이 무엇인지 미리 읽으려고합니다 사람과 본질적으로 게임이 발전하고있는 곳을 좋아하는지 여부를 파악하십시오

이것이 바로 맨 위에있는 것입니다 각각의 추론들 가운데 하나는 모든 다른 동작입니다 그것은 탐험 중입니다 맨 아래는 주어진 play-out에 대한 점수의 변화입니다

오른쪽 상단에 보이는이 그래프 게임이 각면에서 어떻게 진행되고 있다고 생각하는지입니다 그것이 올라갈 때, 그것은 한쪽을 생각합니다 이기고있다 상대방이 이기고 있다고 생각합니다 그래서 모든 버그 정보가 거기에 있습니다 그럼에도 중요한 것은 물론 우리보다 Minigo 사물이 훨씬 빠릅니다

그래서 우리는 1/20 만 샘플링하는 것입니다 앤드류 잭슨 : 우리는 샘플링 중입니다 테이블 위치의 1/20 그 위치, 맞아 앤드류 잭슨 : 그래서, Go 선수 들로서, 이것은 우리에게 정말로 흥미 롭습니다

사물을 볼 때 생각하고있는 것을보고보고보기 우리가 생각하지도 모르는 행동 우리가 생각하지 않을 것입니다 그리고 우리는 그것이 계속이 무엇이라고 생각 하는지를 볼 수 있습니다 그 후에 무슨 일이 일어날 지 그래서 이것은 정말 훌륭한 학습 도구이며 우리에게 유용합니다 Go 선수

KIRKLAND : 나는 말하기를, 슈퍼 매혹적인 한 가지 나는이 경기를 본다 나는 마치, 이것은 내가할만한 것입니다 이것은 실제로 나에게 매우 인간적인 게임처럼 보입니다 맞습니다 이것은 더 작은 모델입니다

이것은 9에서 9까지 진행되는 Go 게임입니다 Go의 실제 게임은 실제로이 게임의 네 배입니다 하지만 이것은 우리에게 더 쉬운 작은 버전입니다 로컬에서 실행하고 기본적으로 랩톱에서 데모를 제공합니다 대신 큰 비프의 GPU 기계에

그래서 이것은 더 작은 버전입니다, 그것은 더 작은 모델입니다 그러나 결과적으로, 그것은 정말로 중요하지 않습니다 우리는 풀 사이즈의 모델도 가지고 있습니다 너는 우리 양동이에서 그것들을 또한 다운로드 할 수있다 우리의 모든 데이터와 함께

DUSTIN KIRKLAND : 당신은 인간을 가질 준비가 되셨습니까? 앤드루 잭슨 : 네, 우린 인간을 택했습니다 이것은 누구와도 공개적으로 놀고있다 이동 서버에서 재생하려고합니다 아직 개발 중입니다 우리가 결과를 복제 할 수 있기를 바란다

그 다음에 할 수있는 다른 것을 탐구하기 시작하십시오 그걸로 무엇을 추가 할 수 있는지, 어떤 다른 종류의 옵션들 거기있다 하지만 개선해야 할 부분이 많습니다 앤드류 잭슨 :해야 할 일이 많습니다 알아 내야 할 버그가 항상있다

우리는 항상 더 잘 만들고 있습니다 앤드류 잭슨 : 우리를 찾고 싶다면, 이 모든 것이 GitHub에 있으며 TensorFlow 바로 아래에 있습니다 저장소 그래서 githubcom/tensorflow/minigo, 우리는 어떤 종류의 끌어 오기를 할 것입니다

요청, 의견, 문제, 불만, 음모론, 모든 것 DUSTIN KIRKLAND : 매혹적인 매혹적인 계획 이걸 Kubernetes 마지막 비트에 묶는 것 Kubernetes는 밑에 인프라를 제공했습니다 Kubernetes가 없으면, 너의 선택은 뭐니? 앤드류 잭슨 : 그래서, 내가 끝나면 이것의 초기 구현, 어려운 부분은 실제로 구현되지 않았다는 것을 깨달았습니다

신경 네트워크 어려운 부분은 이 엄청난 양의 셀프 플레이를하고 데이터를 생성하십시오 그것은 단지 20,000 게임이 아니며, 그것은 모델 당 2 만 게임이며, 아마도 500 모델을해야 할 것입니다 따라서이 계산의 막대한 양입니다 어떻게 내가 알아낼 필요가 있었는지 각 게임에 몇 분이 걸릴 때 그렇게 할 것입니다

그리고 운 좋게 나는 Kubernetes에 맞붙었던 사람을 알고 있었다 조쉬, 내가 어떻게해야 돼? VM을 직접 관리하기 위해 많은 bash 스크립트를 작성하고 싶습니다 전적으로 요 Bash가 올바른 선택입니다 앤드류 잭슨 : 오, 이런, 이걸 어떻게 저울질 할거야? 오픈 소스 도구 만 있으면됩니까? Google 인프라가 없기 때문에 기대다

Kirkland : 다른 부분이 맞아요 맞아 인프라 단일 VM을 프로비저닝 할 필요가 없었습니다 당신은 GPU를 찾을 필요가 없었습니다

앤드류 잭슨 : 나는 많은 일을해야했다 도커 이미지 내부에서 코드가 작동하도록하려면, 왜냐하면이 멍청이를 만들기 때문이야 이미지는 매우 효과적입니다 Docker의 추상화는 음, 실제 실리콘이 무엇인지에 대해 걱정하지 마십시오 그러나 TensorFlow와 GPU는 매우 컸습니다

모든 프로세서 최적화로 컴파일하려고하면 우리는 최신 NVIDIA 드라이버로 컴파일하려고합니다 도커 이미지 내부에서 모든 작업 수행 가벼운 것은 아니지만 훨씬 쉬워졌습니다 특히 GPU 출시와 함께 생각합니다 GKE에서 최신 정보를 얻는 것이 전체 상황입니다 드라이버, CUDA DNN 설치, 그게 먼 길이다

그리고 우리가 이것을 시작했을 때에도, 그것은 단지, 6 개월 전 같아요 그 이후로 먼 길을왔다 그래서 꽤 재미 있어요 슈퍼 호쾌 하네 앤드류 잭슨 : 그런 종류의 진전을 볼 수 있습니다

하지만 그 어려운 부분은 그 성능을 얻고있었습니다 그 용기 안에 그래서 컨테이너가 이러한 종류의 고성능 컴퓨팅에는 장애물이 없습니다 가능한 한 빨리 GPU를 사용하고 싶다면, 당신은 모든 확장 프로세서를 사용하고자합니다 지침, 인스턴스에서도 그렇게 할 수 있습니다

당신이 그 (것)들을 만드는 방법에 약간 배려는이다 그래서 나는 그것이 꽤 흥미있는 것이라고 생각합니다 Kirkland : 더 환상적입니다 조쉬, 앤드류, 시간 내 주셔서 감사합니다 고마워

앤드류 잭슨 : 고마워 [음악 재생]