메인 콘텐츠로 건너뛰기
블로그 컴퓨팅 Linode가 6주 만에 하드웨어에서 GPU를 라이브로 이동한 방법

Linode가 하드웨어에서 Live GPU로 6주 만에 옮긴 방법

Linode의 Cloud GPU

2019년에 세 개의 부서는 Linode의 생일까지 고객을 위해 새로운 Linode GPU 인스턴스를 출시하는 목표를 설정했습니다. 하드웨어, 마케팅 및 관리팀 간에, 특히 그 기간 동안 작업 중이던 다른 제품에서 이것이 가능한지 확신할 수 없었습니다.

그래서 우리는 이런 일이 일어날 수 있는 한 팀을 선택했습니다. 팀 미션 GPU를 구성하기 위해 여러 부서에 걸쳐있는 열성적인 직원들로 구성된 팀입니다. 이제 거의 2 년 전에 많은 GPU 인스턴스를 배포하고 그 이후에 많은 GPU 인스턴스를 배포하여 우리가 어떻게 그렇게 했는지에 대한 심층적인 통찰력을 제공하고 아이디어를 우리가 적극적으로 확장하고 있는 성공적인 제품으로 전환했습니다.

Linode의 가상화 역사에 대한 간략한 배경

우리가 GPU 인스턴스를 착수하는 방법을 시작하기 전에, 오늘 알고 있는 클라우드 공급자가 되기 전에 Linode에서 가상화가 시작된 방법에 대한 간단한 기술 세부 정보와 역사가 있습니다.

Linode는 2003년 소규모 기업으로 시작하여 Qemu (Quick EMUlator)와 유사한 초기 가상화 패러다임인 UML (User Mode Linux)을 실행하는 가상 머신을 제공했습니다. UML은 완전히 가상화 된 하드웨어를 제공했습니다. 고객이 Linode에 로그인하면 디스크, 네트워크, 마더 보드, RAM 등과 같이 고객이 본 장치는 모두 실제 하드웨어 장치처럼 보이고 동작하지만 실제로는 실제 하드웨어가 아닌 소프트웨어로 지원됩니다.

몇 년 후 Linode는 고객에게 최신 성능 향상을 제공하기 위해 가상화 계층으로 Xen으로 이동했습니다. Xen은 type1 하이퍼바이저입니다. 즉, 하이퍼바이저는 하드웨어에서 직접 실행되고 게스트는 Xen 커널에서 실행됩니다. Xen 커널은 게스트에게 반 가상화를 제공하거나 Linode가 보는 하드웨어 인터페이스가 Xen 커널을 통해 실제 시스템 호출로 변환되어 사용자에게 반환됩니다. 이 변환 계층이 존재하는 이유는 보안 및 기타 안전 기능을 제공하여 올바른 지침이 올바른 Linode로 이동하도록 하기 위한 것입니다.

그로부터 몇 년 후 KVM (Kernel Virtual Machine) 이라는 새로운 기술이 개발되었습니다. KVM은 CPU 명령에 반 가상화 인터페이스를 제공하는 리눅스 커널의 일부로 구성됩니다. Qemu는 KVM을 활용할 수 있는 가상화 기술 중 하나입니다. Linode는 고객의 이익을 위해 다시 전환하기로 결정했습니다. 고객이 KVM으로 무료 업그레이드를 했을 때 대부분의 워크로드에서 성능이 즉시 향상되었습니다. 이러한 유형의 반 가상화는 Xen과 다릅니다. CPU 명령은 게스트(Qemu)에서 호스트 커널로, 프로세서 수준 명령을 사용하여 CPU로 직접 전달되어 거의 기본 실행 속도를 허용합니다. 이러한 명령의 결과는 Xen이 요구하는 부담없이 명령을 발행한 Linode로 반환됩니다.

그렇다면 이 모든 것이 Linode GPU 인스턴스와 어떤 관련이 있습니까?

Linode는 시장 조사를 수행하고 GPU 워크로드 실행에 관심이 있는 고객에게 최고의 가치를 제공할 수 있는 것이 무엇인지 결정하려고 노력했습니다. 우리는 "호스트 패스 스루"라는 기술을 사용하여 GPU를 고객에게 직접 제공하기로 결정했습니다. GPU 카드인 경우 게스트에게 전달할 하드웨어 장치를 Qemu에 알려주고, Qemu는 Linux와 함께 작동하여 시스템의 다른 프로세스에서 사용할 수 없도록 GPU 카드를 분리합니다. 호스트 리눅스 시스템은 이를 사용할 수 없으며 시스템의 다른 Linode도 사용할 수 없습니다. 요청한 고객만 GPU 카드를 사용할 수 있으며 전체 카드를 받습니다. 실제 하드웨어 장치는 변경되지 않고 반 가상화되지 않고 전달됩니다. 즉, 변환 계층이 없습니다.

1주 차 : Linode에 하드웨어 도착

연구가 완료된 후 전체 팀은 프로젝트를 진행하기로 결정했습니다. 계획이 작동하려면 전체 하위 수준 스택에 걸쳐 몇 가지 변경이 필요했습니다. 하드웨어는 월요일에 온라인 상태가 되었고 데이터 센터가 마감일을 맞추기 위해 대량 주문을 진행할지 여부를 결정하는 데 5일이 걸렸습니다.

관련된 모든 사람이 동일한 이해를 가지고 있었기 때문에 주당 40시간의 정규 근무 시간에 작업을 수행 할 수 없다면 앞으로 나아갈 수 없었을 것입니다. 이것은 초과 근무를 해야 한다는 부담이 없었지만 새로운 Linode 제품의 미래를 결정하는 데 5일밖에 걸리지 않았습니다.

그래서 무슨 일이 일어났습니까? 우리의 모든 연구가 성과를 거두었습니다. 일부 기존 문서를 따라 시도했지만, 예상대로 정확히 작동했습니다. 며칠 만에 테스트 환경에서 GPU를 Linode에 안정적으로 연결할 수 있었습니다. 금요일까지 우리는 이것을 해낼 수 있다고 확신했습니다. 테스트에 성공했습니다! 이제 고객을 위해 대량 주문을 하고 앞으로 나아갈 때였습니다.

2주 차 : 하드웨어 인터페이스 계층이 GPU에서 작동하도록 만들기

성공적인 초기 테스트 후 월요일에 재충전하여 사무실에 들어와 GPU 부착 프로세스를 기존 Linode 생성 워크 플로와 통합할 준비를 했습니다. 우리는 인터페이스를 가능한 한 간단하게 만들려고 노력합니다. 단 몇 번의 클릭으로 Linode를 배포하고, 우리가 고려해야 할 몇 가지 작업에 많은 내용이 들어갑니다.

GPU를 가능하게 하려면 GPU 및 Linode 용 RAM을 분리하고 분리된 RAM 및 GPU와 쌍을 이루는 Linode 전용 CPU 코어를 제공하는 등 몇 가지 저수준 부분을 작성하고 구현해야 했습니다. 마더 보드의 NUMA (불균일 기억 장치 접근) 아키텍처를 조사한 결과 NUMA RAM 그룹을 가장 밀접하게 연관된 CPU와 PCIe에 연결된 NUMA 그룹 (PCI [Peripheral Computer Interface] express) GPU가 연결된 레인. 이를 통해 1, 2, 3 또는 4개의 GPU가 연결된 Linode를 부팅하고 마더 보드 구조에 따라 GPU 카드와 밀접하게 관련된 RAM 및 CPU 코어의 일부를 차지할 수 있었습니다.

하드웨어 계층이 완료된 후, 우리는 클라우드 관리자 및 API를 통해 Linode를 부팅할 수 있도록 Linode Job Queuing 메커니즘과의 인터페이스 작업을 수행했습니다. 이 단계에서 우리는 신뢰성 테스트를 시작할 수 있었습니다. 우리가 원했던 마지막 작업은 시스템 장애로 인해 한밤 중에 호출을 받는 대기 엔지니어 였거나 다른 시간대의 고객을 위해 근무 시간 중에 시스템이 다운되도록 하는 것이 었습니다. 고객과 엔지니어 모두의 수면 일정을 염두에 두고 테스트를 일찍 시작했고, 고객이 견고하고 신뢰할 수있는 제품을 선택했는지 계속 확인했습니다.

3주 차 : 관리자 인터페이스 및 계정 변경

세 번째 주에는 몇 가지 관리 질문이 있었습니다. 어떤 고객이 어떤 Linode에 할당되었는지 어떻게 추적합니까? 고객을 GPU가 없는 Linode 인스턴스가 아닌 GPU가 있는 Linode 인스턴스로 보내는 방법은 무엇입니까?

모든 추적 및 제어가 구현되어야 했습니다. 우리가 가지고 있는 GPU 카드 수, 가져온 GPU 카드 수, 비어있는 카드 수, 새 고객에게 판매 할 수 있는 카드 수를 설명하기 위해 이렇게 했습니다. 또한 이 GPU 추적을 내부 관리자 인터페이스에 구축해야 했습니다. 이것은 지루한 회계 작업처럼 보일 수 있지만, 수동 단계없이 이 신제품을 기존의 모든 제품과 인터페이스 하기 위해 전체 팀과 외부 팀 구성원의 많은 독창성이 필요했습니다.

고맙게도 우리는 모두를 모았고 코드를 작성하고 테스트하여 제대로 작동하고 안정적으로 작동하는지, Linode GPU 인스턴스를 시작하고 실행하기 위해 수동 개입이 필요하지 않은지 확인할 수 있었습니다. 이 단계에서 이 작업을 수행하는 또 다른 이점은 테스트가 더 쉽다는 것입니다. Linode GPU 인스턴스를 불러 오려면 관리자 인터페이스에서 버튼 하나만 클릭하면 됩니다.

4주 차 : 고객이 Linode를 스핀 업할 수 있도록 공개 API 변경

관리자 인터페이스 버튼을 만들어 Linode GPU 인스턴스를 불러 온 후 기분이 꽤 좋았습니다. 이제 우리는 이와 동일한 기능을 고객에게 공개해야 했습니다. 공용 API는 Python으로 지원되므로 코드를 매우 직관적으로 만들 수 있습니다. 변경 사항을 롤 아웃하고 매우 빠르게 테스트 할 수 있었습니다. 까다로운 부분은 테스트를 위해 회사 내에서 이 기능을 사용할 수 있도록 하는 것이었지만 안정성을 위해 필요한 테스트를 수행하기 전까지는 회사 외부에서 사용할 수 없었습니다.

5주 차 : 배포! 또는 기능 플래그 뒤에 공개 기능을 배포하는 방법

초기에 배포하고 자주 배포하십시오.

우리는 통신을 시작하고 있었기 때문에 우리는 이것을 대중에게 공개하고 궁극적으로 고객이 이 새로운 서비스를 사용하게 하는 것에 대해 어떻게 느끼고 있습니까?라는 질문을 던졌습니다.

대답은 모든 알려지지 않은 사항을 초기에 처리하고 초기에 자주 배포하여 설명하는 것이 었습니다. 여전히 팀에서 일부 사용 사례를 테스트하는 동안 Linode GPU 인스턴스를 대중에게 배포했지만 기능 플래그 뒤에 숨었습니다. 직원 계정에서 GPU를 테스트 할 수 있었고 이를 통해 고객이 GPU를 사용할 경우 예상 한대로 작동하는지 확인할 수 있었습니다. 우리가 예상하지 못한 것을 발견할 때마다 수정하고 공개 배포했습니다.

느리지만 확실하게 거의 매일 코드를 배포하면서 목록에 있는 모든 것을 해결했습니다. 우리는 변경 사항이 부족했고 이를 고객에게 진정으로 개방할 수 있다는 자신감을 느꼈습니다.

6주 차 : 테스트! Linode 직원에게 개방형 GPU

Linode에서 일할 때의 가장 큰 장점 중 하나는 누구보다 먼저 최첨단 기술을 접할 수 있다는 것입니다. (P.S. 채용 중!) 모든 직원은 우리가 출시하는 모든 기술이 치열한 테스트를 거치도록 새로운 제품을 출시할 기회가 있습니다. 모든 직원은 업무 시간 중에 Linode GPU 인스턴스를 테스트하기 위해 등록할 수 있으며, 작업 후에도 고객이 원하는대로 Linode GPU 인스턴스를 사용할 수 있습니다. 직원 계정에 태그를 지정하고 GPU를 가동하기만 하면 됩니다.

Linodians가 새로운 GPU를 시도한 몇 가지 방법은 다음과 같습니다.

  • 클라우드 게임 – 게임이 Linode GPU 인스턴스에서 실행되고 비디오 및 컨트롤이 Steam Link ™를 통해 전송됩니다.
  • 3D 렌더링
  • 비디오 변환 부호화
  • 암호 강도 테스트
  • TensorFlow 실행

이 단계 후에 우리는 성능 메트릭을 수집하고 프로덕션으로 이동하여 고객에게 출시할 준비가 되었다고 결정했습니다.

시작하다!

출시했습니다! 우리는 축하했습니다! 아이스크림과 스웩이 있었다! 고객들은 불과 몇 주 전에 개발 중인 제품을 사용해보기 시작했습니다. 가장 좋은 점은 모든 것이 출시일에 작동했다는 것입니다. 우리는 마지막 순간에 변경을 할 필요가 없었고, 불을 끄지 않았으며, 고객이 만족했으며 모든 것이 안정적으로 작동했습니다.

실제 코드 출시는 어렵지 않았습니다. 코드 및 시스템 구성 관점에서 GPU를 프로덕션에 시작하는 데 필요한 것은 기능 플래그를 제거하는 것뿐이었습니다. 그러나 Linode에서 제품 출시에 들어가는 다른 많은 것들이 있습니다: 기술 문서, Linode 클라우드 관리자에서 UI 변경, 그리고 우리의 신제품을 축하하는 데 도움이 되는 모든 재미있는 마케팅 자료.

출시 후 : 6개월 동안 코드 변경 없음

우리는 항상 몇 가지 질문을 떠올립니다. 충분한 테스트를 했습니까? 6주가 너무 빨랐나요?

우리의 경우에는 적절한 속도였습니다. 출시 이후로 코드를 만질 필요가 없었습니다. 그리고 Linode GPU는 매일 고객 사용량을 확인했습니다. 제품을 구축하고 작동하게 한 다음 계속해서 다른 훌륭한 제품을 구축할 수 있고 2년 전에 구축한 제품이 최소한의 상호 작용만으로 여전히 실행되고 있을 때 좋습니다.

돌이켜 보면 다음과 같이 성공할 수 있었습니다.

  1. 미리 조사를 수행하십시오. 이것은 실제로 하드웨어 없이도 할 수 있는 모든 미지의 문제를 해결하는 데 큰 도움이 되었습니다.
  2. 계획 세우기 – 우리는 매우 상세한 계획을 가지고 있었고 각 단계를 제때에 실행해야 했습니다. 그렇지 않으면 시작할 수 없었을 것입니다.
  3. 계획을 고수하십시오 – 당면한 작업에 집중하고 수행해야 할 나머지 작업을 염두에 두십시오.
  4. 좋은 관리 팀을 확보하십시오. 모든 수준의 경영진이 마감일이 촉박한 프로젝트가 한 단계를 놓치면 출시 마감일이 맞지 않는다는 사실을 이해하고 있는지 확인하십시오. 이것은 우리가 성공할 수 있게 해주는 가장 중요한 부분일 수 있습니다. 약간의 압력은 좋은 것입니다. 우리의 경우처럼 너무 많은 압력은 소진과 실패로 이어집니다. 경영진과 일정을 논의한 후 그들은 완전히 참여했습니다.
  5. 서로 지원 – 기회를 잡은 한 팀은 나머지 조직의 전체 지원 구조 없이는 기회가 없었을 것입니다. 모든 동료가 당신이 성공하기를 원할 때 그들은 당신이 필요하다면 모두 뛰어들어 도와줄 것입니다.
  6. 테스트 – 테스트 테스트 테스트 테스트, 한 번 더 입력 할 수 있다면 여전히 테스트라고 말할 것입니다. 자동 및 수동 테스트 모두. 이것이 우리 팀 중 아무도 6개월 동안 코드를 건드리지 않아도 되는 주된 이유였습니다.

GPU 문서를 확인하여 Linode GPU 인스턴스에 대해 자세히 알아보고 뉴어크, 뭄바이 및 싱가폴 데이터 센터에서 GPU 가용성을 방금 확장했습니다.

현재 워크로드에 Linode GPU를 사용해보고 싶으십니까? 1주 무료 평가판을 통해 GPU가 어떻게 작동하는지 확인할 수 있습니다. 여기에서 자세히 알아보십시오.

(또한 Linode GPU와 같은 제품을 구축하고 테스트하는 데 도움을 주고 싶다면 채용 중입니다! )


댓글 (1)

  1. Author Photo

    how to make windows os in linode

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 필드가 표시됩니다 *