• 소식

    • 래블업-인텔, Backend.AI에서 인텔® Gaudi® 2 및 인텔® Gaudi® 3 AI 가속기에 대한 지원 발표

      By 래블업 주식회사

      서울, 대한민국 — 래블업은 SuperComputing 2024에서 Backend.AI가 인텔® Gaudi® 2 및 인텔® Gaudi® 3 AI 가속기를 지원한다고 발표했습니다. Backend.AI가 지원하고 있는 NVIDIA, Rebellions, FuriosaAI, AMD 등의 AI 가속기 공급업체 라인업에 인텔을 추가함으로써, 래블업은 시장에서 가장 다양한 AI 가속기와 GPU를 고객에게 제공하게 되었습니다. 래블업은 이를 통해 Backend.AI 플랫폼의 경쟁력을 강화하고 고객들에게 더욱 폭넓은 선택권을 부여하게 되었습니다.

      *2024년 11월 현재, Backend.AI는 인텔® Gaudi® 2 AI 가속기를 지원하고 있습니다.

      *인텔® Gaudi® 3 AI 가속기에 대한 지원은 2025년 상반기에 예정되어 있습니다.

      래블업과 인텔은 인텔® Gaudi® 2 및 인텔® Gaudi® 3 AI 가속기가 보여줄 수 있는 최상의 성능을 Backend.AI에서 제공하기 위해 긴밀히 협력해 왔으며, 이러한 협력의 결과로 Backend.AI의 인텔® Gaudi® 2 및 인텔® Gaudi® 3 AI 가속기 지원을 발표합니다.

      Backend.AI의 Sokovan™을 통한 강력한 컨테이너 오케스트레이션

      Sokovan™은 멀티테넌트 및 멀티노드 확장 시나리오에 적합한 독립 실행형 오픈소스 컨테이너 오케스트레이터입니다. Sokovan™은 최신 하드웨어 가속 기술에 최적화되어 있으며, 사용자가 정의할 수 있는 작업 스케줄링 및 노드 할당 정책을 통해, AI 성능 저하 없이 단일 클러스터에서 인터랙티브, 배치, 그리고 서비스 워크로드가 혼합된 형태의 하이브리드 환경까지도 지원합니다.

      AI 가속기를 최대치로 활용하고, 여러분의 잠재력을 실현하세요.

      복잡한 비즈니스에서는 탁월한 AI 성능과 우수한 관리 용이성이 성공의 열쇠입니다. 인텔의 최신 제품인 인텔® Gaudi® 3 AI 가속기는 강력한 AI 성능과 기능을 제공합니다. 서비스형 플랫폼인 Lablup Backend.AI는 엔터프라이즈급 AI 환경에 최적화된 다양한 기능을 제공합니다.

      인텔® Gaudi® 2 및 3 플랫폼과 깊숙이 결합된 우리의 기술 혁신

      이미 비즈니스 환경에 인텔® Gaudi® 2 AI 가속기 또는 인텔® Gaudi® 3 AI 가속기를 도입한 고객과 향후 인텔® Gaudi® 2 & 3 플랫폼을 도입할 고객 모두 래블업 Backend.AI가 인텔® Gaudi®에 대해 지원하는 다양한 혜택을 누릴 수 있습니다. 인텔® Gaudi® 2 & 3 플랫폼과 함께 동작하는 Backend.AI 기능의 일부를 확인해 보세요.

      카드 레벨 가속기 할당 (Card-level accelerator allocation)

      사용자가 의도한 만큼의 실제 가속기를 제공하여 인텔® Gaudi® 2 & 3 AI 가속기 클러스터 워크로드를 극대화합니다. 예를 들어, 고객은 기존에 선호하는 플랫폼에서 모델을 실행 및 훈련한 다음 인텔® Gaudi® 2 및 3 플랫폼에서 서비스를 제공하거나 그 반대의 경우도 가능합니다.

      외부 스토리지 할당 (External storage allocation)

      통합 스토리지 솔루션을 최대한의 성능으로 활용하세요. 사용자의 개입 없이 공급업체별 파일 시스템 가속 기능을 활용하세요. Backend.AI는 Dell PowerScale, VAST Data, WEKA, NetApp 등과 같이 널리 사용되는 주요 플랫폼을 지원합니다.

      멀티스케일 워크로드 (Multi-scale workloads)

      소규모 모델을 실행할 수 있는 단일 카드 AI 워크로드부터 대규모 모델을 실행할 수 있는 멀티 노드 멀티 카드 AI 워크로드까지, 어떤 환경에서도 Backend.AI는 최고의 성능을 보장합니다. 11월 1일 현재, Backend.AI는 단일 카드 AI 워크로드와 단일 노드, 다중 카드 AI 워크로드를 실행할 준비가 되었습니다. 다중 노드, 다중 카드 AI 워크로드 지원은 올해 마무리될 예정입니다.

      추론 통계 데이터 관리 (Inference statistics management)

      AI 프레임워크에서 제공하는 성능에 대한 최신의 상세한 지표를 모니터링하세요. Backend.AI는 하드웨어의 정보뿐만 아니라 소프트웨어의 통계 데이터를 가져올 수 있기 때문에, 관리자가 메트릭을 심층적으로, 쉽게 분석할 수 있도록 만들어줍니다.

      규칙 기반 추론 레플리카 자동 스케일링 (Rule-based inference replica auto scaling)

      시스템이 리소스 사용량을 스스로 최적화할 수 있습니다. 다양한 하드웨어 및 소프트웨어 수치 모니터링을 통해, 관리자의 수동 개입 없이도 다양한 사용자의 사용 패턴에 대응합니다.

      *현재 개발 중(2024년 12월 개발 완료 목표)

      NUMA 인식(NUMA-aware) 리소스 할당

      CPU 소켓이 여러 개 있고 각 소켓마다 여러 개의 가속기가 있는 경우 단일 노드 내에서 CPU 간 및 PCIe 버스 오버헤드를 제거하여 베어메탈에 가까운 성능을 달성할 수 있습니다.

      유저 및 프로젝트 기반의 스토리지 할당량 관리

      사용자 또는 단일 프로젝트당 데이터 스토리지 할당량을 제한하여 예산 효율적이고 간편하게 데이터 공간을 관리할 수 있습니다.

      Hugepage 메모리 할당 지원

      주소 변환 (Address Translation)의 오버헤드를 줄이기 위해 더욱 큰 메모리 페이지 (Hugepage)를 사용하되, 그 수를 줄여 AI 가속기를 사용할 때의 CPU 오버헤드를 최소화합니다. 해당 기능에 대한 Backend.AI의 지원은 올해 안에 마무리 될 예정입니다.

      이외에도 더 많은 기능들이 기다리고 있습니다

      래블업은 인텔과 지속적으로 소통하며 Backend.AI의 가능성을 넓혀가고 있습니다. 더 많은 기능이 아직 개발 중이며, 곧 선보여질 예정입니다. Backand.AI와 인텔® Gaudi® 3 AI 가속기를 활용하여 여러분의 클러스터 활용도를 높여보세요.

      인텔® Gaudi® 3 AI 가속기의 성능을 Backend.AI에서 누리세요

      Backend.AI는 인텔® Gaudi® 3 AI 가속기의 성능을 최대로 끌어낼 수 있도록 설계되었습니다. 인텔® Gaudi® 3 AI 가속기는 기본적인 컴퓨터 비전 및 NLP 모델, 심지어는 거대언어모델 및 멀티모달 모델까지 최첨단의 (state-of-the-art) 모델을 학습하고, 실행할 수 있도록 합니다. 인텔® Gaudi® 3 AI 가속기는 가격 대비 훌륭한 성능과 운영 효율성을 제공합니다. 클라우드, 혹은 데이터 센터 그 어디에서도 효율적인 확장성을 제공하도록 설계된 인텔® Gaudi® 3 AI 가속기는 AI 업계에 그 어느 때보다 필요한 선택지를 제공합니다.

      여러분의 작업을 최고 수준의 사용자 인터페이스에서

      다른 시스템과 달리, Backend.AI는 시스템 관리자가 최대한 쉽게 시스템을 제어할 수 있도록 설계되었습니다. 사용자 친화적인 인터페이스 덕분에 관리자는 몇 번의 클릭과 입력만으로 시스템을 관리할 수 있습니다. Backend.AI WebUI는 다양한 산업 환경에서 검증된 고객들이 널리 사용하고 있으며, 고객들은 CLI(명령줄 인터페이스)를 사용하지 않고도 GUI를 통해 수행할 수 있는 다양한 기능에 만족하고 있습니다.

      Backend.AI를 통해 인텔® Gaudi® 2 및 인텔® Gaudi® 3 AI 가속기를 '관리하기 쉬운' 플랫폼으로 만들어보세요.

      래블업은 과학자, 연구원, DevOps, 기업 및 AI 애호가들이 AI 서비스를 효율적이고, 확장 가능한 형태로 사용할 수 있도록 하기 위해 최선을 다하고 있습니다. 우리는 인텔과 함께 오늘날 널리 사용되고 있는 생성 AI 및 딥 러닝 기반 서비스의 성공을 위해 긴밀히 협력하고 있습니다. 다양한 고객들로부터 검증된 래블업의 기술을 통해, 인텔® Gaudi® 2 및 인텔® Gaudi® 3 플랫폼과 Backend.AI는 하드웨어 수준 통합을 제공하기 위해 노력하고 있습니다.

      인텔® Gaudi® 3 AI 가속기 소개

      검증된 MLPerf 벤치마크 성능을 갖춘 고효율 인텔® Gaudi® 플랫폼을 기반으로 하는 인텔® Gaudi® 3 AI 가속기는 까다로운 훈련 및 추론을 처리하도록 설계되었습니다.

      데이터 센터 또는 노드부터 메가 클러스터에 이르는 클라우드에서 대규모 언어모델, 멀티 모달 모델, 엔터프라이즈 RAG와 같은 AI 응용 프로그램을 지원하며, 이미 보유하고 있을 가능성이 있는 이더넷 인프라에서 모두 실행됩니다. 단일 가속기가 필요하든 수천 개의 가속기가 필요하든, 인텔® Gaudi® 3는 AI 성공에 중요한 역할을 할 준비가 되어 있습니다.

      인텔® Gaudi® 3에 대해 자세히 알아보려면, intel.com을 방문하세요.

      래블업 Backend.AI 소개

      Backend.AI는 여러분의 AI 비즈니스를 극대화시키기 위해 시중의 다양한 GPU와 AI 가속기를 지원하고 있으며, 사용자들이 편리하게 사용할 수 있도록 직관적인 사용자 인터페이스를 제공하고 있습니다. 고객은 가장 작은 수준의 언어 모델부터 거대 언어모델까지 AI 모델의 크기에 구애받지 않고 AI 모델을 효과적으로 구축, 학습, 제공할 수 있어 서비스 개발과 운영의 비용, 복잡성을 크게 줄일 수 있습니다. Backend.AI는 생성형 AI와 가속 컴퓨팅의 잠재력을 최대한 이끌어내 최첨단 기술을 통해 여러분의 비즈니스를 혁신할 수 있는 열쇠가 되어가고 있습니다.

      Backend.AI®에 대해 자세히 알아보려면, backend.ai를 방문하세요.

      31 October 2024

    • NVIDIA GTC 2024에서 만나요! 래블업이 AI 기술의 최전선을 보여드립니다

      By 래블업 주식회사

      안녕하세요, 래블업입니다. 오는 3월 18일부터 21일까지 미국 새너제이에서 열리는 NVIDIA GTC 2024 컨퍼런스에 래블업이 참가합니다. 5년 만에 열리는 이번 대면 행사에서 래블업은 실버 스폰서로서 그 동안 개발해온 최신 AI 기술과 제품을 선보일 예정입니다.

      About GTC 2024

      GTC는 NVIDIA가 주최하는 AI 분야 최대 규모의 기술 컨퍼런스입니다. 30만 명 이상이 온오프라인으로 참여할 것으로 예상되는 이번 행사에서는 NVIDIA CEO Jensen Huang의 기조연설을 비롯해 900여 개의 세션과 300여 개의 전시 부스, 20여 개의 기술 워크숍 등 다양한 프로그램이 마련되어 있습니다. 제너러티브 AI를 포함한 최신 AI 기술 트렌드를 한눈에 파악할 수 있는 최고의 기회가 될 것입니다.

      Lablup at GTC 2024

      래블업은 GTC에서 전시 부스(#1233)를 운영하며, APAC 지역 유일의 NVIDIA DGX-Ready 소프트웨어인 Backend.AI Enterprise 플랫폼을 시연합니다. Backend.AI는 NVIDIA DGX 시스템을 비롯한 GPU 인프라의 성능을 극대화하고 사용성을 개선해주는 AI 인프라 운영 플랫폼입니다.

      또한 래블업의 MLOps 솔루션인 FastTrack도 함께 선보입니다. FastTrack을 통해 생성형 AI 모델의 전체 개발 과정을 간소화하고 자동화할 수 있습니다. 특히 파운데이션 모델을 다양한 산업 분야에 맞춰 자동으로 파인튜닝하고 챗봇 등으로 활용하는 데모도 준비되어 있습니다.

      Sessions at GTC

      래블업은 두 가지 주제로 GTC 세션 발표에도 참여합니다.

      첫 번째 세션에서는 "Idea to Crowd: Manipulating Local LLMs at Scale" 이라는 제목으로, 개인용 GPU부터 대규모 데이터 센터까지 다양한 규모에서 로컬 LLM을 파인튜닝하고 운영하는 기술과 사례를 소개합니다.

      특히 래블업의 GPU 유동화 기술을 활용해 다양한 크기의 거대언어모델(LLM)과 이미지 생성 모델을 함께 멀티 GPU에 효율적으로 적재하는 방법에 대해 심도 있게 다룰 예정입니다. LLM 로딩 후 불가피하게 발생하는 GPU 메모리 낭비를 최소화하고, 모델별 성능 저하와 전체 성능 향상의 trade-off를 분석한 실험 결과도 공유합니다. 이를 통해 온프레미스 환경에서 AI 모델 서빙을 보다 비용 효율적으로 수행하는 방안을 제시할 것입니다.

      두 번째 세션에서는 Personalized Generative AI라는 주제로, 개인용 GPU를 활용해 가정에서도 손쉽게 생성형 AI 모델을 구동하고 개인화하는 방법을 다룹니다. PC나 가정용 서버 등 작은 규모의 하드웨어에서 생성형 AI를 자동으로 운영하고 파인튜닝하는 기술을 소개하고, 이를 통해 개인 맞춤형 AI 비서가 우리 삶에 더욱 밀접하게 스며들 미래를 전망해볼 것입니다.

      곧 만나요!

      짧게나마 래블업이 이번 GTC에서 선보일 기술과 비전을 소개해드렸습니다. 3월 새너제이에서 열리는 GTC 2024에 참석하시는 분들께서는 래블업 부스(#1233) 에 꼭 들러주시기 바랍니다. 최신 AI 기술을 직접 체험하고 래블업 팀과 직접 소통하실 수 있습니다.

      온라인으로 참여하시는 분들도 래블업 세션 발표를 통해 로컬 LLM과 개인화된 생성형 AI의 현재와 미래를 만나보실 수 있을 것입니다. 래블업은 앞으로도 AI 기술의 최전선에서 기업과 개인이 AI를 보다 쉽게 활용할 수 있도록 노력하겠습니다. 감사합니다!

      15 March 2024

  • 출시

    • Uncharted AI: 대 AI 시대

      By 래블업 주식회사

      해당 글은 2024년 9월 24일, lab | up > /conf/4에서의 신정규 대표 기조 연설을 요약한 글입니다.

      2024년 9월 24일, 래블업의 4번째 컨퍼런스, lab | up > /conf/4가 열렸습니다. 래블업의 직원들 뿐만 아니라 다양한 외부 연사 분들이 참여하여 자리를 빛내 주셨는데요, 해당 행사의 기조연설은 래블업의 CEO, 신정규 대표가 맡아 주었습니다.

      Photo by 'iT dongA'

      이번 글을 통해 신정규 대표가 기조 연설을 통해 소개한 AI 시대의 발전, 앞으로의 래블업의 방향성, 그리고 래블업이 개발하고 있는 제품들에 대한 업데이트와 몇가지 새로운 제품들에 대해 소개하고자 합니다.

      Uncharted Waters

      이번 기조연설의 제목인 <Uncharted AI - 대 AI시대'는 많은 분들이 추억하는 명작 게임, '대항해시대 - Uncharted Waters'에서 가져왔습니다. 대항해시대는 단순한 게임이 아닙니다. 이 시대는 실제 존재했던 우리 지구촌의 역사이기도 하며, 중요한 의미를 가지는 시대입니다.

      대략 15세기 이후, 대항해시대에는 수많은 사람들이 향신료를 찾아 먼 바다 너머로 여행을 떠났습니다. 지금은 어디서나 구할 수 있는 '후추'를 찾기 위해서였죠. 우리는 그 시대에 태어나진 않았으니, 저는 후추를 찾기 위해 열심히 게임을 했죠. 지금 생각하면 그깟 향신료가 뭐라고 싶지만, 당시 수많은 모험가들은 자신들의 목숨을 걸어가며 향신료를 찾아 떠났습니다.

      Uncharted AI

      그 시절 향신료를 찾아 바다 건너 목숨을 걸고 모험을 떠났던 수많은 사람들처럼, 지금 우리는 인공지능(AI)이라는 새로운 시대를 맞이하여, 인공지능을 발전시키기 위해 목숨을 걸고, 다양한 파트너들과 함께 노력해 나가고 있습니다. 왜 이런 노력이 필요하느냐, 그것은 바로 '접근성' 때문입니다. 후추를 내 집 앞마당에서 수확할 수 있다면, 굳이 바다를 건너야 할 필요가 없겠죠. 새로운 시대가 시작되었을 때, 이런 접근성의 차이가 누군가에게는 기술격차를 만들어내기도 하고, 누군가에게는 도전의 기회를 만들어내기도 하는 것입니다. 새로운 기술로 인해 생겨난 기술 격차는 래블업이 새로운 시대를 열어젖히는 원동력이 되었습니다.

      래블업의 모토는 2015년 창립 초기부터 명확했습니다. 우리는 Make AI Accessible을 목표로 기술의 접근성을 높이고, 장벽은 낮추는 것을 핵심 미션으로 삼았습니다. AI 기술을 단순히 API 형태로만 사용하는 것이 아니라, 사용하는 사람이 인프라스트럭처에 대한 기술 자체를 이해하고 사용할 수 있도록 하자. 이를 통해 수많은 사람들이 AI에 접근하는 장벽을 낮추자는 것을 목표로 삼았습니다.

      AI 분야가 발전하며 새로운 도전이 나타났습니다. 바로 스케일의 문제입니다. AI 기술이 다루는 데이터의 규모가 커지고, 연산의 규모가 커지며 과거에는 싱글 노드로 감당했던 수준을 넘어 멀티 노드가 되고, 수십 수천대, 몇 만대의 GPU를 다루는 시대가 되었죠. 동시에, AI는 작아지고 있기도 합니다. 올해 초 삼성이 공개한 Galaxy AI, 애플이 얼마 전 공개한 Apple Intelligence처럼 여러분의 손 안에서 온디바이스로 동작하는 AI도 있고, IoT 센서와 같은 온도계에도 AI가 돌아가고 있습니다.

      그러니까, 더 높은 전력과 많은 리소스를 사용하여 AI를 돌리려는 시도가 이어짐과 동시에, 더 낮은 전력과 적은 리소스를 사용해서 AI를 돌리려는 시도들도 꽃을 피우고 있는 것입니다. 기존에 우리가 AI라고 생각했던 어떠한 범위가 있다면, 그 범위가 위로 (크게) 확장되는 동시에 아래로 (작게) 축소되고 있기도 한 것입니다. 그리고 양 쪽 방향으로 스케일 밴드를 이동시키는데 필요한 기술은 완전히 다르죠.

      래블업이 사업을 시작했던 2015년만 해도 지포스 GTX970만으로도 모델을 만들 수 있었지만 지금은 워크로드의 규모가 너무나도 빨리 커지고 있기 때문에, 이 워크로드의 증가가 무어의법칙이라 부르는 반도체의 성능발전을 넘어서게 된 지가 벌써 4~5년이 지났습니다. 그렇기에 이젠 수직으로 칩의 성능이 증가하는 것이 아니라, 여러개의 칩을 묶어 수평으로 활용하는 시대가 된 것이죠.

      Make AI "Scalable"

      최근 4년 사이 AI 분야에서의 분산 컴퓨팅 패러다임이 급격히 진화하고 있습니다. 패러렐 프로세싱을 넘어 이제는 다양한 종류의 연산이 동시다발적으로 일어나고 있습니다. 데이터를 처리하고, 모델을 학습시키고, 서비스를 제공하는 등 이질적인 작업들이 한데 어우러집니다. Heterogeneous computation resource가 동시에 요구되고 일부는 데이터베이스, 일부는 트레이닝, 일부는 데이터 가공, 일부는 플릿 관리 및 RAS… 더 많은 부분이 서비스 스택에 가까워졌습니다.

      게다가 이 모든 작업에 GPU와 같은 가속기가 필수불가결해졌습니다. 이제 우리는 단순히 CPU와 GPU를 분리해서 사용하는 게 아니라, 두 자원을 더욱 긴밀하게 연동해야 합니다. 기존의 GPU 기반 서비스 + CPU 서비스로 나누는 대신, 두 종류의 리소스가 더 강하게 결합되기 시작한 것이죠. 이같은 변화의 근본 원인은 모든 서비스에 GPU가 필요해졌기 때문입니다. 이런 상황에서는 전력, 네트워크, 데이터 등 물리적인 제약 뿐 아니라, 하드웨어 불안정, 플랫폼 관리, 소프트웨어 결함 등 비물리적인 제약들까지도 모두 병목으로 작용하게 됩니다. 래블업은 이런 스케일링의 장벽을 걷어내는 데 주력하고 있습니다.

      이것이 바로 래블업이 올 해 새로 내건 목표, Make AI Scalable입니다. 우리는 가속장치부터 싱글 노드를 거쳐 하이퍼스케일에 이르는 모든 범위에서 AI 워크로드의 확장성을 추구합니다. 스케일링에 방해되는 모든 요소를 없애고, 스케일링에 필요한 모든 요소를 더합니다. 그리고 그 과정에서 AI 기술에 대한 접근 장벽을 계속 허물고 있기 때문에, 우리의 새로운 목표는 "Make AI Accessible"이라는 기존 목표에서 이어지죠.

      그동안 래블업은 AI를 Accessible하고, Scalable하게 만들기 위한 다양한 노력을 이어왔고, 이는 다양한 혁신으로 이어졌습니다. 이러한 결과로, Backend.AI로 운영되는 엔터프라이즈 GPU 유닛의 숫자는 13,000개에 육박하며, 단일 사이트 기준 1,500개 이상의 GPU를 관리하고 있는 경우도 있습니다. 래블업의 제품을 사용하는 팀(고객사)도 100여개 이상으로 확장되었죠. 클라우드 서비스, AI 가속기 테스트베드, 자율주행 등 다양한 분야에서 Backend.AI는 AI의 핵심 인프라로 자리잡았습니다.

      이러한 대규모 확장은 기술적 난이도를 크게 높였습니다. 우리는 한 대의 서버부터 수천 대의 클러스터까지, 모든 스펙트럼을 아우르는 기술을 개발해야만 했습니다. 그 기술은 앞에서 말씀드렸듯, "스케일링에 방해되는 모든 요소를 없애고, 스케일링에 필요한 모든 요소를 더하는" 것입니다. 이번 기회를 통해 래블업이 지금까지 이뤄낸 혁신과 앞으로 이뤄낼 혁신, 우리가 그리고 있는 미래에 대해 공유드리겠습니다.

      Open Source

      먼저, 래블업은 오픈소스 생태계에 깊이 관여하고 있는 오픈소스 기업입니다. Backend.AI, Callosum, aiodocker, aiomonitor(, aiotools), Raftify등 다양한 프로젝트를 개발하고 공개하고 있습니다. 오픈소스는 우리의 DNA에 새겨져 있습니다. 우리가 만들어 공개하거나 기여하는 오픈소스들의 배포 이식성은 적은 노력으로도 다양한 온프레미스 환경을 커버하는 래블업의 핵심 경쟁력이기도 합니다. Backend.AI의 온프레미스 환경에 대한 지원, 클라우드 환경과의 호환성 등은 모두 오픈소스 경험으로부터 래블업이 확보한 역량이라 할 수 있습니다.

      Backend.AI CLI Installer: TUI로 경험하는 쉬운 설치 경험

      Backend.AI CLI Installer는 Backend.AI에 대한 접근성을 높이기 위한 새로운 오픈소스입니다. TUI (Text-based User Interface)를 도입하여 쉽게 Backend.AI를 설치할 수 있고, 패키지 기반 설치를 자동화하며, 자동 설치용 메타 설정을 지원합니다.

      bndev: 나만의 AI 인프라를 손쉽게

      단순 패키지 기반 설치가 아니라, 내가 직접 뜯어 고치며 해킹하고 싶은 분들을 위해 bndev라는 개발도구를 공개했습니다. bndev를 통하면 복잡한 Backend.AI 개발 환경을 손쉽게 구축하고 관리할 수 있습니다. 모두가 자신만의 AI 인프라를 가질 수 있고 고칠 수 있게 되는 것이죠.

      Backend.AI Core

      Backend.AI는 매 년 3월과 9월에 메이저 버전 릴리즈를 진행합니다. 2024년 3월에는 24.03 버전을 릴리즈했고, 곧 24.09 버전의 릴리즈를 눈앞에 두고 있습니다. 24.09 버전과 그 이후의 버전에도 영향을 미칠 요소로, Backend.AI Core에 큰 변화가 있습니다. 해당 내용을 소개드리겠습니다.

      Key Updates

      • NVIDIA NGC(NVIDIA GPU Cloud) NIM(Nemo Infrerence Microservice) 실행 지원: 라이선스 기반 컨테이너 이미지 적재 등 NGC의 주요 기능을 Backend.AI에서 활용할 수 있습니다.
      • Intel Gaudi2, Rebellions ATOM+, Furiosa RNGD 등 신규 가속기 지원 대폭 확대: Backend.AI 내에서 고객의 워크로드 특성에 맞는 최적의 AI 가속기를 유연하게 선택할 수 있습니다.
      • Backend.AI 모델 스토어, 브라우저, 서빙 기능 정식 출시(GA): MLOps의 핵심 기능을 아우르는 원스톱 솔루션으로, 고객이 손쉽게 AI 모델을 검색하고, 자신의 워크로드에 바로 배포할 수 있습니다.
      • 작업 스케줄링 체계 강화: 새로운 Priority Scheduler를 통해 작업의 우선순위를 스케줄러와 독립적으로 지정할 수 있으며, 중요도가 높은 작업을 빠르고 안정적으로 처리할 수 있습니다.
      • Agent Selector 개념 도입: Agent Selector는 스케줄러가 선택한 작업을 실제로 어떤 노드에서 실행할지를 결정하는 역할을 합니다. 이제 이 부분도 독립된 플러그인 형태로 쉽게 사용자 정의할 수 있습니다. 이를 활용하면 작업을 각 노드의 전력 사용량이나 온도 등 다양한 기준에 따라 분산 배치할 수 있습니다. 노드 간 부하를 균등하게 맞추고, 전력 효율을 높이는 등 인프라 운영을 최적화하는 데 큰 도움이 될 것으로 기대합니다.
      • 자체 Docker 네트워크 플러그인 개발: 대규모 데이터 처리를 위한 GPUDirect Storage 지원 범위를 넓혀, 단일 노드 안에서의 데이터 이동 병목을 최소화하였습니다.
      • 컨테이너 간 통신을 위한 Cilium 기반의 네트워킹 스택 도입: 대규모 분산 학습에 도움이 되는 기능으로, 해당 스택을 통해 기존 대비 30%의 네트워크 성능 향상을 확인했습니다.
      • OIDC(OpenID Connect) 기반의 통합 인증 체계 확보: 단일 계정으로 Backend.AI를 포함한 다양한 인프라 서비스에 접근, 계정 관리가 대폭 간소화됩니다.
      • 엔터프라이즈 환경 지원 대폭 확대: GitLab, GitHub Enterprise, AWS ECR 등 다양한 PrivateContainer Registry와의 연동이 가능하며, 기업 내부 레거시 자원과 클라우드를 모두 아우르는 하이브리드 구성도 쉽게 구성할 수 있습니다.

      위와 같은 업데이트를 기반으로, Backend.AI는 고성능 컴퓨팅(HPC)을 위한 기능과 엔터프라이즈를 위한 기능을 모두 갖춘 차세대 AI 인프라스트럭처로서의 면모를 확장해 나가고 있습니다. 향후 자세한 업데이트 내용은 Backend.AI 24.09 출시와 함께 확인할 수 있습니다.

      Next-gen Sokovan

      래블업은 내년 초 출시를 목표로 차세대 Sokovan에 대한 작업도 이어나가고 있습니다. 차세대 Sokovan에 대한 내용을 간략하게 공개합니다.

      • 쿠버네티스를 지원하는 듀얼 엔진 아키텍처: 기존의 독자적인 클러스터 관리 체계와 함께, 쿠버네티스 네이티브 서비스로도 동작하게 됩니다. 이를 위해 쿠버네티스 오퍼레이터 프록시를 통한 가속기 관리 기능을 탑재할 예정입니다. NVIDIA와 AMD의 각종 디바이스 플러그인, 인텔 GPU 플러그인 등을 매끄럽게 연동, 업계 표준을 지원하게 되는 것이죠.
      • HA 구성 시 Raftify를 활용한 DB 부하 분산 기술 적용: 메타데이터 서비스에 대한 병목 현상을 최소화하고, 수만 대 규모 클러스터에서도 안정적인 운영이 가능해집니다.
      • 거대언어모델 서빙을 위한 자동 스케일링 강화: 단순 리소스 사용량뿐 아니라, 요청 패턴과 레이턴시 등 API 메트릭을 종합적으로 분석해 최적의 스케일링을 수행합니다.
      • 프로젝트 단위 강화: 데이터 세트와 모델, 파이프라인 등을 하나의 단위로 묶어 관리할 수 있게 됩니다. 이를 통해 세밀한 **RBAC(Role-Based Access Control)**를 적용해 다양한 협업 시나리오를 지원하는 것이 목표입니다.
      • 엔터프라이즈 고객을 위한 관리 기능 강화: 통합 로깅과 모니터링은 물론, 규제 준수를 위한 감사 로그 추적 기능을 갖추게 됩니다.

      이 모든 변화는 한 가지 목표를 염두하고 만들어지고 있습니다. 바로 고객의 AI 프로젝트를 가속화하는 것이죠. 래블업의 개발팀은 신규 AI 가속기를 비롯해 각종 쿠버네티스 기반 솔루션과의 연계를 통해 Backend.AI Core 및 MLOps 기능의 성숙도를 한 층 더 높여갈 수 있을 것으로 기대하고 있습니다. 더욱 폭넓은 역할을 수행하게 될 차세대 Sokovan의 여정을 기대해 주시기 바랍니다.

      Backend.AI WebUI

      빠른 시일 안에, Backend.AI WebUI는 새 옷을 입습니다. 사용자 관점에서 Backend.AI의 첫인상을 결정짓는 가장 중요한 요소는 바로 사용자 인터페이스일 것입니다. 우리는 그동안 WebUI의 중요성을 깊이 인식하고, 꾸준하게 혁신을 거듭해 왔습니다. 다양한 사용자 경험 테스트를 위해 작년에는 ML Desktop을, 올해 초에는 GenAI Desktop을 출시하기도 했죠. 최근에는 Neo Session Launcher를 통해 사용자 친화적인 UI를 제품에 적용하기도 했습니다.

      WebUI의 세 번째 새로운 변화, WebUI Neo를 소개합니다. Vice Versa Design Studio와의 긴밀한 협업을 통해 풍부한 사용자 경험을 제공하는 것을 목표로 설계되었죠. 이 새로운 디자인 언어는 처음부터 끝까지 사용자를 고려하고 설계되었습니다. Backend.AI 리뉴얼에 맞춰 UI/UX 전반을 재설계하여 한 층 세련되고, 미래지향적인 분위기를 느낄 수 있을 것입니다.

      WebUI Neo는 '인지 부하의 감소'와 '시각적 은유의 일관성 유지'를 콘셉트로 설계되었습니다. '인지 부하의 감소' 측면에서, 우리는 사용자가 복잡한 정보를 입력하거나, 탐색해야 하는 상황을 최소화하고자 하였습니다. 예를 들어, 대규모의 실험을 설정하는 경우 수십가지의 옵션을 한 번에 늘어놓는 것 보다는 순차적으로 정보를 노출하여 단계별로 확인 가능한 정보의 양을 제한했습니다.

      '시각적 은유의 일관성 유지' 측면에서는, 실험과 모델, 데이터 세트 등 유사한 개념에 대해 화면 구성, 아이콘, 색상에 이르기까지 UI/UX 요소를 유사하거나 동일한 디자인 패턴으로 구성하여 사용자가 한 번 익힌 사용법을 유사 기능을 사용하며 재학습할 필요 없이 재사용할 수 있도록 하였습니다. WebUI Neo는 Core 및 엔터프라이즈에 걸쳐 모두 적용됩니다.

      이러한 혁신성을 인정받아, WebUI Neo는 이번 달 서울특별시와 서울디자인재단에서 주관한 중소기업 산업디자인개발 지원사업에서 총 4개의 컨소시엄에게만 주어지는 우수상을 수상했습니다.

      WebUI Neo는 Backend.AI 24.09 업데이트에 바로 포함되지는 않으며, 올해 연말 정식 출시를 목표로 개발과 테스트가 진행되고 있습니다. WebUI의 첫 버전부터 사용되었던 코드베이스인 웹 컴포넌트 기반에서 리액트 기반으로 이전하는 작업도 한창 마무리 중에 있습니다. WebUI Neo는 단순히 과거의 기능을 재포장하는 선에서 그치지 않습니다. 머신러닝 워크플로와 긴밀하게 연계된 새로운 기능들이 지속적으로 추가될 예정이고, Backend.AI가 추구하는 고도의 자동화와 사용 편의성을 구현하기 위한 기반이 될 것입니다. AI 인프라스트럭처의 복잡성을 넘어 모두가 AI 인프라스트럭처를 쉽게 이해하고 그 혜택을 누리는 세상, 래블업이 WebUI Neo를 통해 그려가는 미래입니다.

      Lablup Enterprise

      Backend.AI Enterprise 를 중심으로 하는 Lablup Enterprise 의 핵심은 ___ made easy 로 표현할 수 있습니다. Lablup Enterprise는 디바이스 드라이버 레벨부터 AIOps까지 엔드 투 엔드 기술로 깊은 단계에서의 AI 기술 혁신을 쉽게 제공하는 것을 목표로 합니다. 저희는 총 3개의 ___ made easy 콘셉트를 잡고 있는데요, 첫번째는 "Scaling made easy", 두번째는 "Acceleration made easy", 마지막은 "Inference made easy" 입니다.

      Scaling made easy: FastTrack 2, Finetun.ing, Cluster Designer

      FastTrack 2

      래블업이 24.09와 함께 릴리즈하는 FastTrack 2는 대규모의 AI 프로젝트를 위한 자동화 솔루션입니다. 프로젝트 그룹 기반의 파이프라인 관리 기능을 제공해, 복잡한 워크플로를 손쉽게 정의하고 실행할 수 있습니다. 다양하고, 재사용 가능한 템플릿을 제공하여 반복적인 작업을 최소화시키는 것을 큰 특징으로 가지고 있습니다. 또한, FastTrack 2에서는 외부 파트너와의 연계를 통해 자원을 더욱 유용하게 활용할 수 있게 됩니다. 파트너사의 모델 압축 노드와 모델 서빙 서비스를 파이프라인에 추가할 수 있습니다.

      Finetun.ing

      Finetun.ing은 FastTrack으로 개발된 클라우드 파인튜닝 서비스이며, 일반적으로 제공되는 파인튜닝 서비스와 다르게 데이터를 직접 준비할 필요가 없다는 큰 특징이 있습니다. 보통은 기반이 되는 데이터를 업로드해서 모델을 파인튜닝하는 시나리오를 많이 생각하는데, Finetun.ing은 사용자가 인터랙티브 프롬프트를 입력하는 것으로 모델 튜닝을 완료할 수 있습니다. 사용자가 플랫폼에게 거는 대화를 기반으로 플랫폼이 자동으로 합성 데이터를 생성하고, 이를 이용하여 모델 튜닝이 이루어지게 됩니다. 파인튠 완료된 모델은 자동 테스트를 거쳐 모델 카드와 함께 사용자에게 다운로드 가능한 형태로 제공됩니다. Finetun.ing은 NVIDIA NemoTron 을 기반으로 구축되어 있으며 Llama 3.1과 Gemma 2부터 지원을 시작할 예정입니다. 현재 다양한 최신 모델의 파인튜닝을 지원하기 위해 테스트를 진행하고 있고, 앞으로 더 많은 모델을 이용할 수 있도록 추가할 예정입니다.

      현재 Finetun.ing은 최종 공개를 앞두고 있고, 이번 행사에서 최초로 Waitlist를 받기로 결정했습니다. https://finetun.ing 에서 Waitlist에 등록하실 수 있습니다.

      Cluster Designer

      Backend.AI Cluster Designer는 GUI 기반의 클러스터 설계 도구입니다. 고객이 원하는 규모와 성능에 맞춰 해당 클러스터의 실효 성능과 함께 필요한 하드웨어 구성과 예상 비용을 자동으로 산출해 줍니다. 실제 구축에 앞서 최적의 아키텍처를 검증하고 싶은 분들께 안성맞춤입니다.

      Helmsman

      Backend.AI Helmsman은 대화형 클러스터 관리 인터페이스입니다. 터미널에서의 채팅만으로 복잡한 클러스터 운용이 가능해집니다. 내부적으로는 Gemma 기반의 파인튠 모델을 활용해, 사용자의 의도를 정확히 파악합니다. TorchTune, LangGraph, LangChain 등의 패키지들을 결합해 온프레미스 환경에서의 대화형 파인튜닝 파이프라인 구축도 지원합니다. Helmsman CLI 및 WebUI를 통한 UI 패키지 및 모델은 Backend.AI 24.09 릴리즈 이후, 연말까지 릴리즈할 예정입니다.

      Acceleration made easy

      두 번째는 "Acceleration made easy"입니다. 우리는 AI 워크로드를 위해 다양한 가속기를 지원하고 있습니다. 현존하는 AI 인프라스트럭처 플랫폼 중 가장 많은 가속기를 지원하고 있습니다.

      CPU 아키텍처 기준으로는 x86은 물론 Arm, RISC-V 등 이종 아키텍처까지 아우릅니다. NVIDIA의 Grace Hopper, AMD의 MI 시리즈, 인텔 Gaudi, GraphCore BOW, GroqCard, Rebellions ATOM+, Furiosa RNGD 등 최신 가속기와의 긴밀한 협업을 통해 Backend.AI 에서 동일한 사용자 경험 및 최고의 성능을 달성할 수 있도록 노력하고 있습니다.

      Inference made easy

      마지막으로 "Inference made easy" 입니다.

      저희는 통합 모델 스토어를 통해 사전학습 모델의 공유와 배포를 간소화했습니다. Hugging Face를 비롯해 자체 레지스트리, 레시피 기반 모델 빌드 등 다양한 방식을 제공하죠. 윈도우의 Choco, macOS의 Homebrew 등의 패키지매니저에서 영감을 얻은 Lablup ION 모델 레시피는 GitHub을 통해 커뮤니티가 기여한 모델 및 서비스들을 명령어 한 줄로 설치할 수 있게 합니다.

      PALI, PALI PALI (PALI2), PALANG

      모델 서비스 운영 측면에서도 새로 소개드릴 내용이 있습니다. 바로 PALI (빨리), PALI2 (빨리 빨리), PALANG (빨랑)입니다.

      PALI(Performant AI Launcher for Inference) 는 Backend.AI 모델 플레이어와 큐레이트 된 모델 카탈로그, 미리 정의된 모델을 조합한 고성능 추론 런타임입니다. 유연한 확장성과 뛰어난 성능이 장점입니다. 누구든지 쉽게 설치하고, NVIDIA NIM, Hugging Face 모델 및 Lablup ION 레시피를 바로 실행하여 모델 서비스를 운영할 수 있습니다.

      PALI2 는 PALI를 위한 전용 하드웨어 인프라 어플라이언스입니다. PALI가 탑재된 어플라이언스 여러 개를 연결해 손쉽게 확장할 수 있습니다. PALI2는 AI 워크로드에 최적화된 아키텍처로, 높은 성능과 낮은 지연 시간을 자랑합니다. 설치 환경에 따라 다양한 아키텍처 및 칩 환경에 맞춘 모델들을 제공하고 업데이트 할 수 있죠.

      NVIDIA 레퍼런스 플랫폼인 GH200을 통합한 PALI2 어플라이언스도 준비하고 있고, 일본 교세라 미라이 엔비전에서 10월 1일에 PALI2의 첫번째 레퍼런스 플랫폼으로 Instant.AI라는 플랫폼을 런칭, 여러분들이 구입할 수 있게 됩니다.

      한국 시장에서의 레퍼런스 플랫폼은 10월 중 예약, 4분기부터 판매 예정에 있습니다. 미국 및 유럽 시장을 대상으로 하는 PALI2 어플라이언스들은 빠르면 올해 4분기부터 만나볼 수 있을 것입니다.

      PALANG은 PALI와 FastTrack, Talkativot, Helmsman 등을 아우르는 언어 모델 추론 플랫폼입니다. 즉시 사용 가능한 추론 및 파인튜닝 세팅을 제공, 대규모 언어 모델의 배포와 운영을 크게 단순화했습니다. Talkativot을 통해서는 맞춤형 챗봇 인터페이스를 쉽게 만들 수 있으며, 개발 과정에서의 모델 비교 및 인터페이스 빌딩을 위한 소프트웨어 컴포넌트들도 제공합니다. 인퍼런스만 필요한 경우 PALI 및 PALI2를 사용하면 되고, 언어모델 파인튜닝과 추론이 모두 필요한 경우 PALANG을 사용할 수 있습니다.

      G

      마지막으로 원 모어 씽... 현재 개발 중인 신규 프로젝트 하나를 살짝 공개하겠습니다. Gemma2 기반의 언어 모델, G입니다. Finetun.ing으로 간편하게 커스터마이징할 수 있는 것이 특징입니다. Helmsman 의 백엔드 모델 및 기업용 에이전트 등의 다양한 용도로 사용될 예정이며 구체적인 내용은 추후에 소개드리도록 하겠습니다.

      From Uncharted AI to Industrial Revolution

      대항해시대, 무수히 많은 모험가들은 후추를 찾아 전세계를 누볐습니다. 그들의 도전은 결과적으로 미지로 남았던 세계의 다양한 영역을 발견했고, 결과적으로 그들이 개척해낸 항로를 통해 세상은 더욱 연결되었습니다. 조선술과 항해술이 발전했고, 새로운 교역로가 열렸고, 의학과 군사기술을 비롯한 다양한 분야에서 혁신이 일어났습니다. 그 뿐만이 아닙니다. 대항해시대가 축발시킨 또 다른 중요한 이벤트, 산업혁명을 빼놓을 수는 없겠죠.

      지금 우리가 마주하고 있는 이 시대를 저희는 대 AI시대라고 부릅니다. 대 AI 시대는 마치 대항해시대 초기와 같이 그 가능성의 문이 이제 막 열리기 시작한 단계에 불과합니다. 누군가는 이제 막 겨우 후추를 들고 돌아오고 있으며, 누군가는 지구가 둥글다는 것을 증명하기 위해 더 큰 배를 건조하고 띄우려 하고 있죠. 이제 AI 분야에도 대항해시대가 산업 혁명에 가져온 변화가 막 일어나고 있습니다.

      Engine of AI Infrastructure

      산업혁명은 제임스 와트의 증기 엔진으로부터 시작되었습니다. 증기 엔진이 발명되면서 대량 생산과 기계화의 시대가 열렸습니다. 이제 우리는 또 다른 혁명의 한가운데 서 있습니다. 거대한 물결 앞에서, 래블업은 새로운 엔진을 만들고 있습니다.

      래블업은 AI 인프라 분야의 엔진입니다. 우리의 기술은 산업 전반에 혁신의 동력을 제공합니다. 증기기관이 석탄의 힘을 이용했다면, 래블업의 엔진은 데이터를 연료로 삼습니다. 마치 자동차 엔진이 휘발유의 에너지를 움직임으로 전환하듯, 래블업은 데이터라는 연료를 인공지능과 인공지능이 주는 가치로 전환하는 효율적이고 강력한 엔진을 제공합니다.

      내연기관이 자동차 산업을 태동시켰듯, AI 엔진은 데이터 기반의 IT산업을 재편할 것입니다. 단순히 데이터를 저장하고 관리하는 수준을 넘어 모든 사람과 기업이 각자 보유한 데이터로부터 통찰과 가치를 이끌어내는 시대, 래블업은 그 시대를 준비하고 있습니다. 래블업의 AI 엔진은 규모와 속도 면에서 타의 추종을 불허합니다. 작게는 IoT, 크게는 수십에서 수만 대에 이르는 GPU를 동시에 가동하고, 페타바이트급 데이터를 실시간으로 처리하는 스케일을 지원합니다. 엔진의 성능이 자동차의 속도를 결정하듯, 우리의 인프라는 AI 생태계에서의 성패를 좌우할 것입니다.

      지금까지 래블업이 만들어온 엔진들을 보셨습니다. 우리는 이 엔진들로 대AI시대를 넘어 AI 산업혁명 시대를 견인해보려 합니다. 여러분 모두가 각자 모두 운전석에 앉을 수 있도록, 우리는 엔진을 설계하고 개선하는 일에 매진하겠습니다. 래블업과 함께 대AI시대의 가속페달을 밟아 주시기 바랍니다.

      27 September 2024

    • 24.03: 출시 업데이트

      By 래블업 주식회사

      2024년 Backend.AI 의 첫 릴리즈인 24.03 이 출시되었습니다. 이번 업데이트에서는 UI 및 사용자 경험이 크게 개선되어 설치와 운영에 대한 기능성이 더욱 향상되었습니다. 지난 23.09 이후 다음과 같은 업데이트 내용을 담고 있습니다.

      Backend.AI Core & WebUI

      • TUI 기반 설치 프로그램이 추가되어 Backend.AI 설치가 한결 간편해졌습니다. 이 설치 프로그램은 다운로드 프로세스를 자동화하여 사용자가 Backend.AI를 쉽게 설치하고 시작할 수 있게 해줍니다.

      • vfolder 에 휴지통 기능이 추가되었습니다. 이제 사용하지 않는 vFolder 의 파일들은 완전히 삭제하는 대신 휴지통으로 이동하고 이후 휴지통 비우기 명령을 통해 완전히 삭제됩니다. 이와 관련하여 vfolder 의 상태를 나타내는 인자값이 추가되었습니다.
      • Backend.AI 모델스토어가 추가되었습니다. 이제 모델스토어에서 다양한 머신러닝 및 딥러닝 모델들을 보관 관리하고 검색하여 쉽게 활용이 가능합니다.
      • vfolder 에 색인용 메타데이터를 추가하여 쿼리시 전체 디렉토리 스캔 대신 인덱스를 활용합니다.
      • 대기 중인 세션 수와 요청된 리소스 슬롯에 기반한 세션 생성에 대한 제한 정책을 도입하여 시스템 리소스 활용이 향상되었습니다. 이 새로운 리소스 정책 옵션은 세션 런쳐의 리소스 프리셋과 커스텀 리소스 슬라이더의 최대값을 필터링하고 설정하는 데 도움이 됩니다.
      • WebUI 에 다크 테마가 추가되었습니다. 이제 사용자들은 개인 취향에 맞는 다양한 옵션의 선택이 가능합니다.

      • WebUI 의 정렬되지 않은 줄바꿈, 공백, 밖으로 새어 나온 안내문 등의 화면 조정과 세션명 유효성 검증 같은 안정성을 위한 기능들이 개선되었습니다.
      • 모델 서빙용 세션 런처에서도 할당 가능한 자원만큼만 입력 가능하도록 UI 입력이 제한됩니다.
      • 다양한 UI 사용자 옵션을 위해 config.toml 파일에 WebUI 앱 다운로드 패널을 숨기는 allowAppDownloadPanel 인자를 추가하였습니다.

      Backend.AI 는 하루가 다르게 변하는 AI 생태계에서 다양한 환경을 지원함과 동시에 더욱 강력하고 사용자 친화적인 환경을 제공하고자 끊임없이 발전하고 있습니다. 앞으로의 행보에도 많은 기대 부탁드립니다! Make your AI accessible with Backend.AI!

      29 March 2024

    • 23.09: 출시 업데이트

      By 래블업 주식회사

      23.09: 2023년 9월 업데이트

      2023년 하반기 Backend.AI의 주요 릴리즈인 23.09 가 출시되었습니다. 23.09 에서는 생성AI 의 개발, 파인튜닝 및 운영 자동화 기능이 대폭 강화되었습니다. 워크로드에 따라 자동으로 AI 모델을 스케일링, 로드밸런싱하고 다양한 GPU/NPU 지원을 확장하였으며 한 대의 노드는 물론 100~2천대 이상의 노드들을 관리할 때의 안정성도 증가하였습니다. 개발팀은 최선을 다해 마지막 비트까지 짜내기 위해 노력하고 있습니다. 지난 23.03 7월 업데이트 이후 개선된 주요 내용들은 다음과 같습니다.

      Backend.AI Core & UI

      • Backend.AI 모델 서비스 (Model Service) 기능이 정식 출시되었습니다. 이제 LLM과 같은 거대 모델의 학습 뿐만 아니라 추론 서비스를 위한 환경까지 Backend.AI 를 통해 더욱 효율적으로 준비할 수 있습니다. 자세한 내용은 Backend.AI Model Service 미리 보기 블로그를 참고하시기 바랍니다.
      • OpenID SSO(Single Sign-On) 를 사용하여 Backend.AI에 로그인 할 수 있는 기능이 추가되었습니다.
      • 커널 이미지가 지원하는 경우, 컴퓨팅 세션에서 sudo 명령을 패스워드 없이 사용하도록 설정 가능합니다.
      • HAProxy를 이용하지 않은 Redis Sentinel 를 지원합니다. 이를 테스트하기 위해 install-dev.sh 파일에 --configure-ha 설정을 추가했습니다.
      • Backend.AI Manager 와 Agent 간의 RPC 채널을 인증 및 암호화 통신이 가능하도록 기능을 추가하였습니다.
      • Backend.AI Manager 의 CLI 로그 기능이 개선되었습니다.
      • Backend.AI Agent 가 NAT 환경 아래에 놓여 있을 경우 Manager 가 RPC 연결을 할 수 없는 문제를 수정하였습니다.
      • Raft 알고리즘 라이브러리인 riteraft-py가 앞으로 raftify 로 개명되어 개발됩니다.
      • 다음의 신규 Storage Backend 들을 지원합니다.
        • VAST Data
        • KT Cloud NAS (Enterprise 전용)

      Backend.AI FastTrack

      • 다양한 이기종 가속기 지원을 위한 UI 를 개선하였습니다.
      • 이제 VFolder 삭제시 저장소 이름이 아닌 독립된 고유 ID 값을 이용합니다.
      • Django 버전이 4.2.5 로, Node.js 버전이 20 으로 업그레이드 되었습니다.
      • 미리 설정된 형태로 파이프라인을 생성해주는 파이프라인 템플릿 기능이 추가되었습니다.
      • 파이프라인 전용 폴더가 삭제되었을 경우 FastTrack UI상에 비활성화된 것으로 표시됩니다.
      • 파이프라인 삭제 과정이 개선되었습니다.
      • 태스크(세션)별 접근 가능한 BACKENDAI_PIPELINE_TASK_ID 환경변수가 추가되었습니다.
      • 태스크(세션)별 실제 실행 시간이 표시됩니다.

      Contribution Academy

      특별히 지난 기간에는 NIPA 에서 주관하는 2023 오픈소스 컨트리뷰선 아카데미를 통해 주니어 개발자 멘티분들의 다음과 같은 코드 기여들이 있었습니다.

      • SSH/SFTP 접속 예제를 클립보드에 복사하는 버튼을 생성하였습니다.
      • 기존에 사용되던 WebUI의 여러 Lit 엘리멘트를 React 로 리팩토링 하였습니다.
      • 다양한 테스트 코드들을 작성했습니다.
      • 정상적으로 동작하지 않던 환경변수 및 메시지 오류들을 발견하고 수정했습니다.

      Backend.AI 는 하루가 다르게 변하는 AI 생태계에서 다양한 환경을 지원함과 동시에 더욱 강력하고 사용자 친화적인 환경을 제공하고자 끊임없이 발전하고 있습니다. 앞으로의 행보에도 많은 기대 부탁드립니다!
      Make your AI accessible with Backend.AI!

      26 September 2023

  • 엔지니어링

    • 한국 문화를 담은 AI 이미지 생성 모델, KIMCHI 개발 이야기

      By 권용근

      들어가며

      래블업 리서치팀은 Backend.AI를 활용하여 다양한 사례를 만드는 일을 하고 있습니다. Backend.AI 내부의 CLI command를 사용자의 지시 사항에 맞도록 자동으로 생성하는 AI Agent를 개발하기도 하고, 각종 행사에 사용되는 간단한 데모를 만들기도 합니다. 예를 들어, 사용자 사진을 활용한 이미지 및 동화 생성 서비스 'VisuTale'도 저희 리서치팀의 작품입니다. VisuTale은 다양한 행사에서 Backend.AI를 이용하여 개발할 수 있는 AI 서비스의 예시로 관람객들의 시선을 한눈에 받았습니다.

      최근 리서치팀 내부에서 연구를 진행하던 중, AI 기반 이미지 생성 모델이 특정 문화적 맥락이나 언어를 제대로 반영하지 못하는 경우가 많다는 사실을 확인했습니다. 이는 글로벌 AI 모델들이 대체로 영어 기반으로 학습되거나, 일반적인 범용 도메인 데이터에 기반하여 학습되는 경우가 많기 때문입니다. 프롬프트에 특정 지역, 혹은 문화에 대한 내용을 입력하면 고유한 특성이 제대로 표현되지 않는 경우가 많죠. 리서치팀에서 다양한 모델을 대상으로 실험해본 결과, 한국어 텍스트 프롬프트를 활용하여 이미지를 생성할 때 한국의 정체성이 이미지에 충분히 드러나지 않는 이슈가 있었습니다.

      예를 들어, Stable Diffusion v1.5와 DALL-E 3와 같은 유명한 모델들은 한국어 텍스트 프롬프트를 제대로 해석하지 못하거나, 생성된 이미지에서 한국의 정체성을 충분히 반영하지 못한다는 문제를 보여줍니다.

      • Stable Diffusion v1.5는 “한국의 라면을 그려줘”라는 한국어 프롬프트를 입력했을 때, 라면 대신 건물 이미지를 생성했습니다. 이는 해당 모델이 한국어 입력을 제대로 처리하지 못했음을 보여줍니다.
      • DALL-E 3는 동일한 프롬프트로 면 요리 이미지를 생성하긴 했지만, 한국의 라면이 아니라 일본의 라멘에 가까운 이미지를 생성하며 한국적인 색채를 담아내지 못했습니다.

      영어로 프롬프트를 입력하는 것 또한 해답은 아닙니다. 한국어 프롬프트를 영어로 번역하는 과정에서 일대일로 대응되는 단어가 없거나, 번역기가 문맥을 이해하지 못해 제대로 된 번역을 내놓지 못하기도 합니다. 예를 들어 "고추장진미채볶음" 이라는 음식을 번역기에 입력하면 "stir-fried vegetables with red pepper paste"라는, 다소 음식에 대한 정확하지 않은 번역을 내놓습니다.

      이에 대한 해결책으로, 한국의 문화와 정체성을 온전히 반영하는 이미지 생성 모델 **KIMCHI (Korean dIffusion Model adapting Culture and HIstory)**가 탄생하게 되었습니다.

      'KIMCHI' 담그기

      Attached Image Source: Wikipedia & Lotte Group

      래블업은 CES, MWC, GTC, SC 등 다양한 해외 행사 및 컨퍼런스에 참여하고 있기 때문에 다양한 데모를 선보일 기회가 정말 많습니다. 이런 상황에서 'KIMCHI'는 문화 특화형 AI 모델의 좋은 사례로 사용될 수 있을 것으로 생각합니다. 래블업의 'KIMCHI'가 문화적 특색을 반영한 맞춤형 이미지를 실시간으로 생성하는 모습을 보여준다면, 해외에서 이목을 끌고 브랜드의 차별성을 효과적으로 알릴 수 있을 것입니다. 더 나아가, KIMCHI는 각종 행사에서 마케팅 자료로도 활용하며 차별화된 콘텐츠를 제공할 수 있는 가능성 또한 열려 있습니다.

      'KIMCHI'는 두 가지 목표를 가지고 개발되었습니다. 1. 한국어 프롬프트를 직접 이해하고 번역 과정을 거치지 않더라도 정확하게 이미지를 생성해내는 것. 2. 한국 문화와 정체성을 반영한 이미지를 생성하는 것. 이 두가지 목표를 모두 달성한다면, 위에서 예시로 사용한 "한국의 라면을 그려줘" 혹은 "한국의 롯데월드타워를 그려줘" 라는 프롬프트에 각각 한국적인 라면과 한국 도심지에 서 있는 롯데월드타워를 생성해낼 수 있을 것입니다.

      이번 글에서는 이러한 'KIMCHI' 모델의 개발 과정과 함께 데이터셋 전처리 프레임워크 한계점을 소개합니다.

      데이터셋 준비

      'KIMCHI' 모델의 학습에는 AIHub에서 수집한 Korean Food Dataset, Korean Historical Building and Landmark Dataset, 한국형 이미지가 포함된 외부 지식 기반 멀티모달 질의응답 데이터와 같은 데이터셋이 사용되었습니다.

      데이터 전처리 과정

      1. VLM(Vision Language Model) Processing: 첫번째로, 준비한 이미지를 LLaVA라는 VLM의 Input으로 프롬프트와 함께 넣어주게 됩니다. 여기서 VLM은 이미지와 텍스트를 함께 이해할 수 있는 멀티모달 AI 모델입니다. 즉, 이미지 안에 담긴 정보를 분석하고, 그 내용을 사람이 이해할 수 있는 텍스트로 바꿔주는 역할을 합니다. 예를 들어, 한 장의 사진을 보고 "A plate of food with a red sauce and a green vegetable." 이라는 영어 캡션을 만들어내는 것입니다. 2. LLM(Large Language Model) Refinement: 그렇게 만들어진 영어 캡션은 언어 모델인 LLaMA에 전달됩니다. LLaMA는, 기존의 영어 캡션을 좀 더 자세하고 정확한 한국어 설명으로 바꿔주는 역할을 하게됩니다. 기존의 영어 캡션이 "A plate of food with a red sauce and a green vegetable."로 이미지에 대한 시각적 정보만을 담고 있었다면, LLaMA는 그것을 "흰색 접시에 놓인 빨간 소스로 버무려진 청갓으로 만든 한국의 전통 요리인 갓김치" 라는 한국어 문장으로 바꿔주게 됩니다.

      이 두 과정을 통해, 기존의 이미지를 잘 설명할 수 있는 한국어 캡션이 만들어집니다. 이렇게 만들어진 캡션은 이후 이미지 생성 모델 학습에 사용됩니다.

      모델 학습

      이러한 과정에서 생성된 한국어 설명은 텍스트 프롬프트로 사용되며, Diffusion 모델의 학습에 활용되었습니다.

      위 이미지에서는 갓김치 이미지에 대해 “흰색 접시에 놓인 빨간 소스로 버무려진 청갓으로 만든 한국의 전통 요리인 갓김치”라는 한국어 설명을 얻었습니다. Diffusion Model을 full finetuning 하는 것은 매우 비용이 많이 드는 작업이므로, 학습 효율성을 높이기 위해 LoRA(Low-Rank Adaptation) 기법을 적용하였고, 한국어 프롬프트를 인코딩 하기 위해 Korean-CLIP 모델의 텍스트 인코더를 사용하였습니다. 이때 Korean-CLIP 모델은 CLIP 모델을 Korean-English parallel 데이터에 추가로 학습한 모델입니다. 이러한 과정을 통해 모델을 추가로 학습시켜, 한국어 프롬프팅이 가능하고 한국의 문화를 자연스럽게 반영하여 이미지를 생성할 수 있는 'KIMCHI'를 개발할 수 있었습니다.

      실험 및 성능 평가

      이미지 생성 실험

      Experiment (1) - 문화적 요소 표현

      위의 비교 실험은 실제 이미지와 함께 DALL-E 3, ChatGPT-4o, Stable Diffusion 2.1(영어 번역 프롬프트 사용), 그리고 KIMCHI 모델이 동일한 한국어 프롬프트를 기반으로 이미지를 생성했을 때의 결과입니다.

      다른 모델들 또한 우수한 성능을 보여주지만, KIMCHI는 부자연스러운 모습 없이 음식의 식감과 재료, 전통 건축물의 디테일 등을 잘 반영하고 있습니다. 이는 KIMCHI가 한국어 텍스트를 정확히 이해하고, 번역 과정 없이도 자연스러운 한국적 이미지를 생성할 수 있도록 학습되었다는 것을 의미합니다.

      Experiment(2): 일반 이미지 생성 능력 보존

      위의 이미지는 KIMCHI가 학습 이후에도 Pretrained model의 생성 능력을 유지하는지에 대한 검증에 대한 결과입니다. KIMCHI는 Stable Diffusion 1.5를 Base model로 활용하여 학습했기 때문에, 함께 비교했습니다.

      성능 평가

      Result(1): 문화적 요소 표현

      실험 이후, 이미지 생성 결과에 대해 평가를 진행했습니다. 평가는 53명의 평가자에게 설문을 통해 진행되었고, 평가자들은 각 모델의 생성 이미지에 대해 위의 항목별로 [매우 그렇다 ~ 매우 그렇지 않다]의 5개 선지 중 하나를 선택했습니다. 이후 평가자의 응답을 1~5점으로 환산하여 각 항목별로 평균값을 측정했습니다.

      위의 표는 Experiment(1)에 대한 실험 결과를 표로 나타낸 것입니다. KIMCHI는 Text-Image Alignment, Reality, Domain-Specific Suitability 에서 다른 모델들을 모두 앞서는 성능을 보여주었습니다. 이는 KIMCHI가 한국어 프롬프트를 잘 반영하여, 실제 이미지에 근접한 이미지를 잘 생성했다는 것을 의미하며 문화적 요소 또한 잘 반영하고 있다는 것을 의미합니다.

      Result(2): 일반 이미지 생성 능력 보존

      위의 표는 Experiment(2)에 대한 Human Evaluation을 통한 평가 결과입니다. Base model인 Stable Diffusion 1.5와 비교했을 때 근소한 차이이지만 Text-Image Alignment, Error Detection에서 뒤쳐지는 결과를 보였습니다. 이는 KIMCHI가 특정 도메인에 특화된 학습을 하는 과정에서 해당 도메인에 집중한 결과 일반적인 이미지에 대한 생성 능력이 다소 감소하였음을 나타냅니다. 하지만 Reality 성능은 잘 보존하고 있는 것을 확인할 수 있었습니다.

      한계점 및 결론

      한계점

      KIMCHI는 Stable Diffusion v1.5를 Base model로 활용하여 fine-tuning된 모델입니다. Stable Diffusion v1.5는 2022년 10월 공개된 모델로, 지금으로부터 2년이 지난 오래된 모델입니다. 따라서 fine-tuning을 한다고 해도 이후에 나온 최신 버전의 모델에 비해 이미지 성능이 높지 않을 수 있습니다. 또한, 한국어 프롬프트를 이해할 수 있도록 이해 능력을 학습시킬 수는 있지만, Text-Image Alignment 능력은 Base model의 능력에 의존적이라는 점에서 한계를 가지고 있습니다.

      결론

      KIMCHI는 한국어 프롬프트를 직접 이해하고, 문화적 뉘앙스를 잘 반영하도록 이미지를 생성하는 모델로, 기존의 이미지 생성 모델들이 가지는 한계점에 도전해본 연구입니다. 아직 많은 한계점들이 존재하지만 본 연구는 다음과 같은 기여점을 가지고 있습니다.

      1. VLM과 LLM를 통한 문화적 맥락 반영 데이터셋 전처리 파이프라인 구축
      2. 별도의 번역을 거치지 않은 한국어 프롬프팅을 통한 이미지 생성
      3. 보다 사실적이고 문화적 맥락을 반영하는 이미지 생성

      이러한 기여점을 바탕으로 특정 문화권의 이미지만 모을 수 있다면 KIMCHI에서 활용했던 데이터셋 생성 전처리 파이프라인을 활용하여 Diffusion model을 fine-tuning할 수 있는 데이터셋을 구축할 수 있고, 이를 통해 해당 언어와 문화에 특화된 생성 모델 개발도 가능할 것입니다.

      본 연구는 한국 문화만을 정교하게 반영한 이미지를 생성하는 데에서 시작되었지만, 이후에는 다양한 문화권을 이해하는 AI 기술로 확장될 수 있습니다. 향후에도 관련 연구들이 계속 발전하여 KIMCHI와 같은 문화 특화 모델이 세계적으로 다양한 문화권에 기여하고, 또한 다양한 문화권을 이해하고 존중하는 AI 기술로 발전할 수 있기를 기대합니다.

      26 December 2024

    • FastTrack을 활용한 Domain adaptive language model fine-tuning

      By 권용근

      Introduction

      이번 글에서는 Backend.AI의 MLOps 플랫폼인 FastTrack을 이용하여 공급망(Supply chain) 및 무역 관련 도메인에 특화된 언어모델을 학습시키고, 평가하는 방법에 대해 설명합니다. 해당 언어모델을 위한 Base model로는 공급망 및 무역 도메인 데이터 세트를 통해 continual-pretrained된 gemma-2-2b-it 모델을 사용하였습니다. 사용처에 따라 Question Answering task에 특화된 모델을 학습시키기 위해 웹에서 직접 수집, 가공한 도메인 데이터 세트를 학습 가능한 질문과 답변으로 구성되는 포맷(이하 Q/A task)으로 변환하여 사용하였습니다.

      AI를 개발하는 과정에서는 데이터 전처리, 학습, 검증, 배포, 추론과 같은 단계를 거쳐야 합니다. 래블업의 FastTrack을 사용하면 위와 같은 각각의 단계를 하나의 파이프라인으로 구성할 수 있고, 파이프라인 구성에 따라 특정 단계를 건너뛰거나 단계별 자원량을 다르게 설정하는 등 손쉽게 커스터마이징 할 수 있습니다.

      Concept of Domain Adaptation

      본격적인 모델 학습에 들어가기 앞서, Domain Adaptation이라는 과정이 필요합니다. 생소하신 분들을 위해 짧게 설명하자면, Domain Adaptation이란 사전 학습된 모델을 특정 도메인에 적합하도록 개선하는 프로세스를 말합니다. 오늘날 우리가 접하는 대다수의 일반적인 언어모델들은 특정 분야에 전문적인 지식을 가지도록 만들어지지 않았습니다. 대부분의 모델은 일반적인 도메인에서의 데이터 세트를 사용하여 다음 토큰을 잘 예측할 수 있도록 학습한 뒤, 전반적인 사용 방향에 맞게 fine-tune 되어 만들어집니다. 그러나 전문 도메인에서 사용될 목적으로 모델을 만든다면, 일반적인 데이터 세트를 사용하여 학습시키는 것은 충분치 않습니다. 예를 들어, 범용적인 도메인에서 학습된 모델은 "이 영화가 매우 훌륭했다"와 같은 일반적인 문장의 맥락을 잘 파악할 수 있지만, "법원이 채무자의 자산을 압류하도록 명령했다"와 같은 법률 도메인의 문장은 제대로 해석하지 못할 수 있습니다. 이는 모델이 각 도메인에서 사용되는 특수한 용어와 표현을 학습하지 않았기 때문입니다. 또 다른 예시로, 어떠한 Q/A task가 주어졌다면 일반적인 데이터로는 Q/A task를 구현할 수 없을 가능성이 있습니다. 제대로 된 Q/A task를 처리하기 위해서는 Q/A task에 특화된 데이터 세트로 사전 학습된 언어 모델을 fine-tune하는 식으로 '특정한 도메인의 데이터'를 넣어주어야 하기 때문이죠. 이러한 fine-tuning 과정은 모델이 작업의 뉘앙스를 더 잘 이해하여 사용자의 domain-specific한 질문에 대해 효과적으로 답변할 수 있도록 합니다.

      이번 글에서는 공급망(Supply Chain Management, 이하 SCM) 및 무역 도메인에 특화된 모델을 개발하는 과정을 다룹니다. 위 그림에서 볼 수 있듯이, "영화"나 "여행" 같은 일반 도메인 용어와 "항공화물운송장", "대금결제인"과 같은 SCM 도메인 용어 사이에는 현격한 차이가 있습니다. 이러한 차이를 좁히기 위해 SCM과 무역 도메인에서의 데이터 세트를 활용하여, 해당 도메인에 대한 모델의 이해도를 높이고, 맥락을 더욱 정확하게 파악할 수 있도록 조정하는 것이 우리가 오늘 달성해볼 목표입니다. 정리하면, Domain Adaptation은 본질적으로 서로 다른 도메인 간의 격차를 해소, 새로운 맥락에서 모델이 더 나은 성능을 발휘할 수 있도록 돕는 과정이라고 할 수 있습니다.

      Train model from scratch vs DAPT

      그렇다면 처음부터 해당 도메인의 데이터 세트를 통해 학습(Train model from scratch)하면 되지 않을까요? 물론 가능하지만, 여러가지 한계점이 존재합니다. 만약 처음부터 해당 도메인의 데이터 세트를 통해 학습하게 되면, 해당 도메인에서의 지식은 물론 일반적인 도메인에서의 지식조차 없는 상황이기 때문에 더 많은 데이터 세트와 학습이 요구될 수 있습니다. 일반적인 도메인에서의 딥러닝을 위한 데이터 세트를 수집하는 것도 어렵지만, 특정 도메인에 국한된 양질의 데이터를 수집하는 것은 더욱 어려운 일입니다. 데이터를 수집했다 치더라도, 모델 학습에 맞게 전처리하는 과정에서 많은 시간과 비용이 발생하게 되죠. 따라서 모델을 처음부터 학습시키는 것은 해당 도메인의 데이터 세트를 충분히 확보하고 있고, 자원을 충분히 보유한 기업에 더 적합한 방법이라고 할 수 있습니다.

      만약 domain-adaptive 한 model을 개발하고 싶은데 아주 많은 데이터 세트를 확보하지 못했거나, 자원이 충분하지 않다면 어떻게 해야 할까요? 이런 경우 선택할 수 있는 방법이 Domain-Adaptive Pre-Training (DAPT)입니다. DAPT란, 이미 일반적인 도메인을 통해 충분히 학습된 모델을 특정 도메인의 데이터 세트로 continual pretraining (지속 학습)하여 도메인에 특화된 모델을 개발하는 과정을 말합니다. 이 방법은 일반적인 도메인에 대한 지식을 이미 보유하고 있는 모델을 추가로 학습시키는 방법이기 때문에, 모델을 처음부터 학습시키는 방법에 비해 상대적으로 적은 비용과 데이터 세트를 요구합니다.

      Development environment Setup

      1. 모델 학습에 앞서, 필요한 패키지들을 설치합니다.
      pip install bitsandbytes==0.43.2
      pip install deepspeed==0.14.4
      pip install transformers==4.43.3
      pip install accelerate==0.33.0
      pip install flash-attn==1.0.5
      pip install xforms==0.1.0
      pip install datasets==2.20.0
      pip install wandb
      pip install evaluate==0.4.2
      pip install vertexai==1.60.0
      pip install peft==0.12.0
      pip install tokenizers==0.19.1
      pip install sentencepiece==0.2.0
      pip install trl==0.9.6
      pip install bitsandbytes==0.43.2
      pip install deepspeed==0.14.4
      pip install transformers==4.43.3
      pip install accelerate==0.33.0
      pip install flash-attn==1.0.5
      pip install xforms==0.1.0
      pip install datasets==2.20.0
      pip install wandb
      pip install evaluate==0.4.2
      pip install vertexai==1.60.0
      pip install peft==0.12.0
      pip install tokenizers==0.19.1
      pip install sentencepiece==0.2.0
      pip install trl==0.9.6
      
      1. 모듈 가져오기
      import os
      import json
      from datasets import load_from_disk, Dataset,load_dataset
      import torch
      from transformers import AutoTokenizer, AutoModelForCausalLM, Gemma2ForCausalLM, BitsAndBytesConfig, pipeline, TrainingArguments
      from peft import LoraConfig, get_peft_model
      import transformers
      from trl import SFTTrainer
      from dotenv import load_dotenv
      import wandb
      from huggingface_hub import login
      

      Dataset preparation

      데이터 세트는 fine-tuning의 목적에 따라 다르게 준비되어야 합니다. 이 글에서는 무역 영역에 대한 질문에 효과적으로 답변할 수 있는 모델을 학습하는 것을 목표로 하기 때문에, 웹 크롤링을 통해 자체적으로 수집한 데이터 세트를 사용합하기로 결정했습니다. 데이터 세트는 무역 자격증 시험 데이터 세트, 무역 용어-정의 데이터 세트, 무역 강의 스크립트 데이터 세트의 세 가지 유형으로 분류됩니다.

      1. 무역 자격증 시험 데이터 세트

      질문: 다음 중 우리나라 대외무역법의 성격에 대한 설명으로 거리가 먼 것을 고르시오. 1. 우리나라에서 성립되고 이행되는 대외무역행위는 기본적으로 대외무역법을 적용한다. 2. 타 법에서 명시적으로 대외무역법의 적용을 배제하면 당해 법은 특별법으로서 대외무역법보다 우선 적용된다. 3. 대외무역법은 국내법으로서 국민의 국내 경제생활에 적용되는 법률이기 때문에 외국인이 국내에서 행하는 무역행위는 그 적용 대상이 아니다. 4. 관계 행정기관의 장은 해당 법률에 의한 물품의 수출·수입 요령 그 시행일 전에 지식경제부 장관이 통합하여 공고할 수 있도록 제출하여야 한다. 정답: 대외무역법은 국내법으로서 국민의 국내 경제생활에 적용되는 법률이기 때문에 외국인이 국내에서 행하는 무역행위는 그 적용 대상이 아니다. 질문: ...

      1. 무역 용어 정의 데이터 세트
      {
        "term": "(계약 등을) 완전 무효화하다, 백지화하다, (처음부터) 없었던 것으로 하다(Rescind)",
        "description": "계약을 파기, 무효화, 철회, 취소하는 것; 그렇지 않았음에도 불구하고 계약을 시작부터 무효인 것으로 선언하고 종결짓는 것."
      }
      
      
      1. 무역 강의 스크립트 데이터 세트

      예전에는 전자상거래 셀러가 엑셀에다가 입력을 해서 수출신고 데이터를 업로드 해서 생성을 했잖아요 그리고 대량으로 전송하는 셀러는 api를 통해서 신고를 했습니다 그런데 그 수출신고 정보의 원천정보를 뭐냐면 쇼핑몰에서 제공하는 판매 주문정보입니다 그래서 그 쇼핑몰에 직접 저희가 연계를 해서 판매 주문 정보를 가져올 수 있게끔 새 서비스를 만들었어요 그래서 API 연계된 쇼핑몰들이 있는데 그게 현재 5개가 연결되어 있는데 쇼피 쇼피파이 라자다 라쿠텐 q10이 있고요 아마존하고 위치도 연계 예정에 있습니다 그래서 셀러는 ...

      Q/A 작업에 알맞은 모델을 만들려면 데이터 세트를 질의응답 형식으로 변환해야 합니다. 첫 번째 데이터 세트인 무역 자격증 시험 데이터 세트와 두 번째 데이터 세트인 무역 용어 정의 데이터 세트는 간단한 코드를 사용하여 변환할 수 있지만, 세번째 데이터 세트인 무역 강의 스크립트 데이터 세트를 확인해 보면 대화 형식의 데이터를 직접 변환하기 어려워 보입니다. 이 경우에는 대화형 스크립트에서 대규모 언어 모델(LLM)을 활용하여 Q/A 쌍을 추출하는 접근 방식을 사용할 수 있습니다. 프롬프트와 그 결과는 다음과 같습니다.

      Prompt

      summary: {summary}
      Instruction: 다음 summary를 기반으로 질문과 해당 답변을 추출하세요.
      출력 형식은 JSON으로, 각 질문과 답변을 객체로 묶어 'qa_pairs'라는 배열 안에 넣어야 합니다.
      'questions' key에는 요약에서 도출된 질문 목록이 포함되어야 하며, 'answers' key에는 각 질문에 대한 해당 답변 목록이 포함되어야 합니다:
      출력 예시:
      {{"qa_pairs": [{{"question": "Question1", "answer": "Answer1"}},{{"question": "Question2", "answer": "Answer2"}},{{"question": "Question3", "answer": "Answer3"}},]...}}
      Output:
      

      Output

      {"qa_pairs":
        [
          {"question": "전자상거래 무역 플랫폼은 어떤 서비스를 제공하나요?", "answer": "판매 주문 관리, 창고 관리, 수출입 통관, 배송 관리 등 전자상거래 업무를 위한 다양한 서비스를 제공합니다"},
          {"question": "쇼핑몰과의 API 연계를 통해 무엇을 간소화할 수 있나요?", "answer": "판매 주문 정보를 자동으로 가져와 수출신고를 간소화할 수 있습니다"},
          {"question": "창고 관리 기능은 어떤 것을 관리할 수 있나요?", "answer": "자가 창고, 위촉 창고, 해외 풀필먼트 센터 등을 관리할 수 있습니다"},
          {"question": "수출입 통관 서비스는 어떤 기능을 제공하나요?", "answer": "미국 세관과 연동된 수출입 통관 서비스를 통해 미국 수출 시 수입 신고를 간편하게 처리할 수 있습니다"},
          {"question": "배송 관리 기능은 어떤 서비스를 지원하나요?", "answer": "우체국 EMS, DHL 등 개별 배송과 함께 해외 현지 라스트 마일 배송까지 지원합니다"}
        ]
      }
      

      이제 간단한 코드를 사용하여 각 데이터 세트를 Q/A 데이터 집합으로 변환할 준비가 된 것 같습니다. 아래의 코드를 사용하여 각 데이터 세트를 Q/A 형식으로 변환해 보겠습니다.

      import os
      import json
      import re
      from datasets import Dataset, concatenate_datasets, load_from_disk
      
      def replace_dot_number(text):
          result = re.sub(r'\.(\d+)\.', r'. \1.', text)
          return result
      
      def read_json(path):
          with open(path, 'r', encoding='utf-8') as f:
              return json.load(f)
      
      def write_json(data, path):
          with open(path, 'w', encoding='utf-8') as f:
              json.dump(data, f, ensure_ascii=False)
      
      def dataset_maker(data:list) -> Dataset:
          return Dataset.from_list(data)
      
      def save_dataset(dataset, save_path):
          dataset.save_to_disk(save_path)
      
      def exam_qa_formatter():
          data = []
          root = 'dataset/exam_data'
          for file in sorted(os.listdir(root)):
              file_path = os.path.join(root, file)
              content = read_json(file_path)['fixed_text']
              question_list = content.split('질문:')[1:]
              for question in question_list:
                  try:
                      question_and_options = replace_dot_number(question.split('정답:')[0]).strip()
                      answer = question.split('정답:')[1].strip()
                      data.append({"context": replace_dot_number(question), "question":question_and_options, "answer":answer})
      
                  except Exception as e:
                      pass
          return data
      
      def description_to_term_formattter(kor_term, eng_term, description):
          context = f"{kor_term}: {description}"
          question = f"설명: '{description}' 이 설명에 해당하는 무역 용어는 무엇인가요?"
          answer = kor_term if eng_term is None else f"{kor_term}, {eng_term}"
          return context, question, answer
      
      def term_to_description(kor_term, eng_term, description):
          context = f"{kor_term}: {description}"
          question = f"'{kor_term}({eng_term})' 이라는 무역 용어는 어떤 의미인가요?" if eng_term is not None else f"'{kor_term}' 이라는 무역 용어는 어떤 의미인가요?"
          answer = description
          return context, question, answer
          
      def term_qa_formatter():
          data = []
          root = 'dataset/term_data'
          for file in os.listdir(root):
              file_path = os.path.join(root, file)
              term_set = read_json(file_path)
              if file == 'terms_data_2.json':
                  term_set = [item for sublist in term_set for item in sublist]
              for pair in term_set:
                  eng_term = pair.get('eng_term', None)
                  if 'term' in pair.keys():
                      kor_term = pair['term']
                  else:
                      kor_term = pair['kor_term']
                  description = pair['description']
                  context_1, question_1, answer_1 = description_to_term_formattter(kor_term, eng_term, description)
                  context_2, question_2, answer_2 = term_to_description(kor_term, eng_term, description)
                  data_1 = {"context": context_1, "question": question_1, "answer": answer_1} 
                  data_2 = {"context": context_2, "question": question_2, "answer": answer_2} 
                  data.append(data_1)
                  data.append(data_2)
          return data
      
      def transcript_qa_formatter():
          data = []
          root = 'dataset/transcript_data/success'
      
          for file in sorted(os.listdir(root)):
              file_path = os.path.join(root, file)
              for line in open(file_path):
                  line = json.loads(line)
                  context = line['context']
                  output = line['json_output']
      
                  qa_pairs = json.loads(output)['qa_pairs']
                  for pair in qa_pairs:
                      question = pair['question']
                      answer = pair['answer']
                      if type(answer) == list:
                          answer = answer[0]
                      data.append({"context": context, "question": question, "answer": answer})
          return data
      
      ###### Term dataset
      {'context': 'APEC 경제위원회(Economic Committee (EC)): 개별위원회나 실무그룹이 추진하기 어려운 여러분야에 걸친 이슈에 대한 분석적 연구작업을 수행하기 위해 결성된 APEC 기구,',
       'question': "설명: '개별위원회나 실무그룹이 추진하기 어려운 여러분야에 걸친 이슈에 대한 분석적 연구작업을 수행하기 위해 결성된 APEC 기구,' 이 설명에 해당하는 무역 용어는 무엇인가요?",
       'answer': 'APEC 경제위원회(Economic Committee (EC))'}
      
      ###### Transcript dataset
      {'context': '수입 신고는 일반적으로 입항 후에 하는 것이 원칙이며, 보세 구역에서 5부 10장을 작성하여 신고합니다',
       'question': '수입 신고는 언제 하는 것이 원칙인가요?',
       'answer': '수입 신고는 일반적으로 입항 후에 하는 것이 원칙입니다.'}
      
      ###### Exam dataset
      {'context': ' 다음 중 우리나라 대외무역법의 성격에 대한 설명으로 거리가 먼 것을 고르시오. 1. 우리나라에서 성립되고 이행되는 대외무역행위는 기본적으로 대외무역법을 적용한다. 2. 타 법에서 명시적으로 대외무역법의 적용을 배제하면 당해 법은 특별법으로서 대외무역법보다 우선 적용된다. 3. 대외무역법은 국내법으로서 국민의 국내 경제생활에 적용되는 법률이기 때문에 외국인이 국내에서 행하는 무역행위는 그 적용 대상이 아니다. 4. 관계 행정기관의 장은 해당 법률에 의한 물품의 수출·수입 요령 그 시행일 전에 지식경제부 장관이 통합하여 공고할 수 있도록 제출하여야  한다.정답: 대외무역법은 국내법으로서 국민의 국내 경제생활에 적용되는 법률이기 때문에 외국인이 국내에서 행하는 무역행위는 그 적용 대상이 아니다.',
       'question': '다음 중 우리나라 대외무역법의 성격에 대한 설명으로 거리가 먼 것을 고르시오. 1. 우리나라에서 성립되고 이행되는 대외무역행위는 기본적으로 대외무역법을 적용한다. 2. 타 법에서 명시적으로 대외무역법의 적용을 배제하면 당해 법은 특별법으로서 대외무역법보다 우선 적용된다. 3. 대외무역법은 국내법으로서 국민의 국내 경제생활에 적용되는 법률이기 때문에 외국인이 국내에서 행하는 무역행위는 그 적용 대상이 아니다. 4. 관계 행정기관의 장은 해당 법률에 의한 물품의 수출·수입 요령 그 시행일 전에 지식경제부 장관이 통합하여 공고할 수 있도록 제출하여야  한다.',
       'answer': '대외무역법은 국내법으로서 국민의 국내 경제생활에 적용되는 법률이기 때문에 외국인이 국내에서 행하는 무역행위는 그 적용 대상이 아니다.'}
      
      # Exam dataset
      Dataset({
          features: ['context', 'question', 'answer'],
          num_rows: 1430
      })
      
      # Term dataset
      Dataset({
          features: ['context', 'question', 'answer'],
          num_rows: 15678
      })
      
      # Transcript dataset
      Dataset({
          features: ['context', 'question', 'answer'],
          num_rows: 8885
      })
      
      # Concatenated dataset 
      Dataset({
          features: ['context', 'question', 'answer'],
          num_rows: 25993
      })
      

      Q/A 형식의 데이터 세트와 합쳐진 데이터 세트(학습 데이터 세트)는 위와 같습니다. 약 26,000개의 Q/A 쌍이 학습에 사용될 것으로 예상됩니다.

      이제 fine-tuning을 위한 데이터 세트가 준비되었습니다. 이 데이터 세트가 실제로 모델에 어떻게 입력되는지 확인해 보겠습니다.

      <bos><start_of_turn>user
      Write a hello world program<end_of_turn>
      <start_of_turn>model
      

      huggingface 웹사이트에서는 채팅 템플릿 형식과 모델의 프롬프트 형식 정의에 대한 정보가 포함된 gemma-2b-it의 모델 카드를 찾을 수 있습니다(gemma-2-2b-it). 즉, gemma에게 질문을 하려면 모델이 이해할 수 있는 형식의 프롬프트를 만들어야 하는 것이죠.

      대화의 시작은 <start_of_turn>으로 표시되며, 대화의 끝은 <end_of_turn>으로 표시됩니다. 화자는 사용자 및 모델로 지정되어 있음을 알 수 있습니다. 따라서 모델에게 질문을 할 때 프롬프트의 형식은 위와 같은 형식이어야 합니다.

      def formatting_func(example):
          prompt_list = []
          for i in range(len(example['question'])):
              prompt_list.append("""<bos><start_of_turn>user
          다음 질문에 대답해주세요:
          {}<end_of_turn>
          <start_of_turn>model
          {}<end_of_turn><eos>""".format(example['question'][i], example['answer'][i]))
              return prompt_list  
      

      이 문서에서는 Q/A 데이터 세트를 사용하여 모델을 학습시키는 데 중점을 두고 있으므로 '이런 종류의 질문에는 이렇게 대답해야 한다'는 식으로 접근하여 모델을 학습시킬 것입니다. 앞서 언급한 채팅 템플릿을 고려하면 위와 같은 형식으로 코드를 작성할 수 있습니다. 이때, 채팅 템플릿에 토큰이 명시적으로 포함되어 있지 않더라도 모델은 구분 기호 이상으로 더 많은 콘텐츠를 생성하려고 시도할 수 있습니다. 이 때 모델이 답변만 제공하고 턴을 종료하도록 하기 위해 토큰을 추가해줍니다.

      <bos><start_of_turn>user
      다음 질문에 대답해주세요:
      '(관세)감축률(Reduction Rate)' 이라는 무역 용어는 어떤 의미인가요?<end_of_turn>
      <start_of_turn>model
      관세를 감축하는 정도를 말함. 예를 들어 200%p에 관세감축률이 50%를 적용하면 감축 후 관세는 100%p가 됨. 극단적인 경우로 관세감축률이 100%이면 모든 관세는 감축 후에는 0%p가 됨.<end_of_turn><eos>
      

      실제 학습에서는 위와 같은 예시가 input으로 들어가게 됩니다. 이제 학습을 위한 데이터 세트 준비를 마쳤습니다.

      Training

      학습 코드는 아주 간단합니다. SFTTrainer를 사용하며, base model로는 이전에 SCM & 무역 데이터 세트를 통해 continual-pretrained 된 모델을 gemma-2-2b-it 모델을 사용합니다.

      model_id = "google/gemma-2-2b-it"
      output_dir = 'QA_finetune/gemma-2-2b-it-lora128'
      tokenizer = AutoTokenizer.from_pretrained(model_id, token=access_token)
      
      model = AutoModelForCausalLM.from_pretrained(
                  # "google/gemma-2-2b-it",
                  "yonggeun/gemma-2-2b-it-lora128-merged",
                  device_map="auto",
                  torch_dtype=torch.bfloat16,
                  token=access_token,
                  attn_implementation="eager", # attn_implementation,
                  cache_dir="./models/models",
              )
      
      
      def formatting_func(example):
          prompt_list = []
          for i in range(len(example['question'])):
              prompt_list.append("""<bos><start_of_turn>user
      다음 질문에 대답해주세요:
      {}<end_of_turn>
      <start_of_turn>model
      {}<end_of_turn><eos>""".format(example['question'][i], example['answer'][i]))
          return prompt_list   
      
      
      def train(data):  
          valid_set = data["test"]
          valid_set.save_to_disk('QA_finetune/valid_set/gemma-2-2b-it-lora128')
      
          lora_config = LoraConfig(
              r=256,
              lora_alpha=32,
              lora_dropout=0.05,
              bias="none",
              target_modules=["q_proj", "o_proj", "k_proj", "v_proj", "gate_proj", "up_proj", "down_proj"],
              task_type="CAUSAL_LM",
          )
      
          training_args = TrainingArguments(
              per_device_train_batch_size=2,
              warmup_steps=2,
              logging_steps=1, 
              gradient_accumulation_steps=4,
              # num_train_epochs=3,
              num_train_epochs=3,  
              learning_rate=2e-4,
              save_steps=100,
              fp16=False,
              bf16=True,
              output_dir=output_dir,
              push_to_hub=True,
              report_to="wandb"
          )
      
          trainer = SFTTrainer(
              model=model,
              tokenizer=tokenizer,
              train_dataset=data['train'],
              args=training_args,
              formatting_func=formatting_func,
              peft_config=lora_config,
              max_seq_length=max_length,
              packing= False,
          )
      
          model.config.use_cache = False
      
          print("Training...")
          trainer.train()
          print("Training done!")
      

      Evaluation

      훈련이 성공적으로 완료되면 필수적으로 모델의 성능을 평가해야 합니다. 이 글에서는 특정 도메인에서의 Question Answering 성능을 평가하는 데 중점을 두었기 때문에 일반적인 모델의 벤치마크에 사용되는 것과는 다른 지표가 필요했습니다. 이 글에서는 SemScore와 Truthfulness를 활용하여 모델을 평가했습니다.

      SemScore: 대상 응답과 모델 응답 간의 의미적 텍스트 유사성을 기반으로 하는 평가 방법입니다.(SemScore)

      Evaluating Truthfulness: 이 방법은 LLM에 모델 응답과 답변을 제공한 다음 1에서 5까지의 척도로 진실성을 측정하는 방식입니다.(Truthfulness)

      Fasttrack pipeline

      이제 FastTrack에서 모델 학습에 사용될 파이프라인을 만들어보겠습니다. 파이프라인은 FastTrack에서 사용하는 작업 단위입니다. 각 파이프라인은 최소 실행 단위인 태스크(Task)의 묶음으로 표현될 수 있습니다. 하나의 파이프라인에 포함되는 여러 개의 태스크는 서로 의존 관계를 가질 수 있으며, 이 의존성에 따라 순차적으로 실행이 보장됩니다.

      Create Pipeline

      위 그림에서 파란색 '+' 버튼을 찾아 새 파이프라인을 만듭니다.

      파이프라인을 생성하면 파이프라인의 이름과 설명, 사용할 데이터 저장소의 위치, 그리고 파이프라인에서 공통적으로 적용할 환경변수 등을 선택할 수 있습니다. 필요한 정보를 입력한 후 하단의 "Save" 버튼을 클릭하여 파이프라인을 생성합니다.

      Drag and create task

      새 파이프라인이 만들어지면 작업 템플릿에 새 작업을 추가할 수 있습니다. Custom Task를 클릭해서 아래 작업 공간으로 끌고오면, task가 새롭게 생성됩니다.

      Enter information

      작업을 만들 때는 위와 같이 작업 실행에 필요한 정보를 입력해야 합니다. 태스크 이름과 설명을 이해하기 쉽게 작성하고, 단일 노드 또는 다중 노드 중 하나를 선택합니다. 본 문서에서는 단일 노드 훈련을 수행하므로 단일 노드를 선택하겠습니다.

      다음으로 명령어를 작성해야 합니다. 명령은 기본적으로 세션을 실행하는 명령어입니다. 실행할 스크립트가 오류 없이 작동할 수 있도록 마운트된 V-folder의 디렉터리를 정확하게 지정해야 합니다. 학습에 필요한 대부분의 패키지는 이미 세션에 설치되어 있지만, 추가 패키지를 설치해야 하거나 버전 문제가 있는 경우에는 패키지를 다시 설치해야 할 수 있습니다. 이 경우 requirements.txt 파일에서 필요한 패키지를 지정하고 설치 후 다른 스크립트를 실행할 수 있습니다.

      Resource configuration

      다음은 세션, 리소스 및 V-folder 설정입니다.

      본 글에서는 Pytorch 기반으로 코드를 작성하였지만, Pytorch 이외에도 Tensorflow, Triton server 등의 환경을 선택할 수 있습니다.

      FastTrack의 장점 중 하나는 리소스를 최대한 효율적으로 활용할 수 있다는 점입니다. 하나의 리소스 그룹 내에서도 여러 세션에 리소스를 분할하여 resource utilization rate를 극대화할 수 있습니다.

      데이터 세트 준비의 경우 별도의 GPU 연산이 필요하지 않기 때문에 GPU 리소스를 할당하지 않아도 괜찮습니다. 이를 통해 최소한의 리소스로 코드를 실행할 수 있으며, 이 시간 동안 다른 세션에 GPU 리소스를 할당할 수 있어 GPU 리소스가 유휴 상태로 남는 상황을 방지할 수 있습니다. 또한 병렬적으로 모델 학습이 필요한 경우(예: 10FGPU가 가용하고 각 훈련 세션에 5FGPU씩 필요한 경우) 모델을 병렬로 학습시킬 수 있죠. 이렇게 하면 리소스 낭비를 줄이고 학습 시간을 단축할 수 있습니다.

      준비한 데이터 세트와 학습 코드가 작성되어 있는 V-folder를 올바르게 선택합니다.

      Duplicate or delete task

      작업 블록의 우측 상단 미트볼 메뉴 아이콘 (⋯)을 누르면 생성된 작업을 복제하거나 삭제할 수 있습니다.

      FastTrack에서는 이와 같이 생성된 여러 개의 작업 사이 순서를 정할 수 있습니다. 이는 작업들 간의 의존성을 추가하는 과정입니다. 경우에 따라 여러개의 작업이 끝난 뒤에 다음 작업이 실행되도록 설정할 수도 있습니다. 이 경우에는 작업들 간의 의존성에 따라 모든 작업이 끝나기 전까지 다음 작업이 진행되지 않습니다. 완성된 예시는 위와 같습니다. 이번 글에서는 dataset preparation - fine-tuning - evaluation 순서로 작업을 진행합니다.

      각 작업이 올바르게 정의되었다면 'Run'을 클릭하여 파이프라인을 실행합니다.

      FastTrack 화면 좌측에서 생성했던 파이프라인들을 확인할 수 있습니다. 클릭하면 파이프라인 작업 세션에서 현재 실행 중인 작업 및 실행했던 작업들을 모니터링 할 수 있습니다.

      Monitoring jobs

      위와 같은 화면을 통해 작업을 모니터링 할 수 있습니다. 각 작업은 지정된 순서대로 진행되며, 이전 작업이 완료되면 다음 작업을 위한 세션을 시작하기 위해 리소스가 할당되고, 작업이 완료되면 세션이 종료됩니다. 필요한 경우 작업을 건너뛸 수 있는 옵션도 있습니다. 일례로, 위의 이미지에서는 dataset preparation 작업을 건너뛰고 fine-tuning 작업이 실행되고 있는 것을 볼 수 있습니다. 건너뛴 작업은 분홍색, 실행되고 있는 작업은 하늘색, 실행 예정인 작업은 노란색으로 나타납니다.

      Log checking

      빨간 네모로 강조되어 있는, 각 작업의 이름 옆의 파란색 버튼을 클릭하면 각 작업의 로그를 확인할 수 있습니다. 이를 통해 트레이닝 진행 상황을 직접 모니터링할 수 있습니다. 로그는 터미널과 동일한 결과로, 위의 화면과 같이 나타납니다. 학습이 잘 이뤄지고 있는 것을 확인할 수 있죠. 파이프라인 실행이 성공적으로 완료되면 결과를 확인할 수 있습니다. 본 문서에서는 평가 결과를 플로팅하여 /home/work/XaaS/train/QA_finetune/truthfulness_result.png 로 저장하도록 구성했습니다. (Backend.AI의 V-folder는 /home/work/~ 가 기본 디렉토리 구조입니다.)

      학습을 마친 뒤, 해당 경로에 결과 이미지가 생성된 모습입니다.

      Result checking

      위와 같이 파이프라인이 성공적으로 실행된 모습을 작업 이름의 왼쪽에서 확인할 수 있습니다.

      Result

      이제 모델을 Fine-tuning 한 결과를 gemma-2-2b-it와 비교하여 확인해보겠습니다.

      1. SemScore (목표 응답과 모델 응답 간의 의미론적 텍스트 유사성, 1.00 is the best)

      | Base Model | Trained Model | |------------|---------------| | 0.62 | 0.77 |

      학습된 모델의 SemScore가 증가했습니다(0.62 -> 0.77). 이 결과는 학습된 모델이 목표 응답과 의미적으로 더 유사한 출력을 생성할 수 있음을 나타냅니다. 즉, 학습된 모델이 의도한 목표 응답에 더 가깝고 의미적으로 더 일관된 응답을 생성하는 능력이 향상되었다는 것입니다. 결과적으로 학습된 모델의 전반적인 성능과 신뢰성이 크게 향상되었다고 할 수 있습니다.

      1. Truthfulness 학습된 모델은 고득점 사례는 증가하고 저득점 사례는 감소하는 경향을 보입니다. 낮은 점수(1, 2점) (1,111 -> 777), 높은 점수(4, 5점) (108 -> 376) 이는 모델이 진실에 가까운 도메인 정보를 식별하는 능력이 향상되고, 훈련이 효과적이었다는 것을 나타냅니다.

      Truthfulness result

      Conclusion

      이번 글에서는 Backend.AI의 MLOps 플랫폼인 FastTrack을 활용하여 특정 domain에 특화된 모델을 학습하는 Pipeline을 구축해보았습니다. FastTrack의 모든 기능을 활용하지 않고 일부 기능만을 사용했음에도 자원을 유연하게 활용하고, Task 설정을 자유롭게 하여 학습 시간을 단축하고, 자원 활용율을 끌어올릴 수 있었습니다. 또한 독립적인 실행 환경에서 안정적으로 학습을 시킬 수 있었으며, Pipeline Job의 실행 정보를 모니터링할 수 있어 학습이 진행되는 동안 각 파이프라인의 자원 사용량 및 실행 횟수를 파악할 수 있었습니다. 이 글에서 다룬 내용 이외에도 FastTrack은 스케줄링, 병렬 모델 학습과 같은 추가적인 기능들을 다양하게 지원하고 있습니다. 아래 첨부된 래블업 블로그 게시글에서 각각 강지현님과 강정석님이 작성하신 FastTrack의 다른 기능들에 대한 더 많은 정보를 확인할 수 있습니다.

      FastTrack의 모든 기능을 활용하지는 못했지만, 자원의 유연한 활용, 자유로운 task 설정 등을 통해 학습 시간을 단축하고 자원의 utilization rate를 높일 수 있었습니다. 또한 독립적인 실행환경에서 안정적인 학습이 가능하고, Pipeline Job 실행 정보를 통해 각 파이프라인에서의 자원 사용량, 실행 횟수 등을 파악할 수 있었습니다. 이외에도 FastTrack에서는 스케줄링, 병렬 모델 학습 등 많은 기능을 지원합니다. 아래의 문서들에서 FastTrack에 대한 더 많은 정보를 확인할 수 있습니다.

      Backend.AI MLOps 플랫폼 FastTrack을 소개합니다.

      FastTrack 길라잡이: 모델 학습 결과 알림 받기

      26 September 2024

    • Model Variant: 손쉽게 대접하는 다양한 모델 서비스

      By 강지현

      들어가며

      어떠한 연구 목적으로 AI를 학습시켜 결과물을 만들어내야 하는 상황에 있다고 가정해봅시다. 우리가 해야 할 일은 AI에게 가르쳐 준 데이터를 AI가 올바르게 학습하길 기다리는 것뿐이죠. 하지만 AI를 '활용'하는 어떠한 서비스를 만든다고 가정하면 이야기가 복잡해집니다. 다양한 모델을 어떻게 시스템에 적용시킬 것인지, 부하 상황에서 어떤 기준에 의해 스케일링을 시켜야 할지 모든 요소 하나하나가 고민거리죠. 이런 고민에 대한 답을 얻기 위해 함부로 사용자가 존재하는 프로덕션 환경을 수정할 수도 없습니다. 프로덕션 환경을 늘렸다 줄였다 하다가 사고라도 난다면 끔찍한 일이 생길 수도 있거든요. 만약에 끔찍한 일이 벌어졌다면, 벌어진 일을 수습하기 위한 시간이 필요할 텐데, 우리 서비스를 사용하는 소비자에게는 모델 학습을 기다리는 연구자와 같은 참을성을 기대할 수 없을 겁니다. 엔지니어링 영역의 어려움 외에 비용에 대한 어려움도 있습니다. 모델을 서비스하는데에는 당연히 비용이 들고, 모델을 학습시키는 그 순간에도 자원을 소모하고 있는 만큼 사용자가 비용을 지출하고 있는 셈이니까요. 그러나 걱정하실 필요는 없습니다. 이미 세상에는 잘 만들어진 모델들이 많이 존재하고, 우리는 그러한 모델들을 가져다가 서비스하는 것으로 충분한 경우가 많거든요. 저희 솔루션에 관심이 있으셨던 분들이라면 다 아시는 내용이겠지만, Backend.AI는 이미 여러분이 모델을 서비스할 때 필요로 하는 기능들을 다양하게 지원하고 있습니다. 트래픽에 따라 서비스를 늘리는 것이나 줄이는 것도, 사용자의 입맛에 맞춘 다양한 모델을 서비스하는 것도 가능하죠.

      그러나 여기서 멈출 Backend.AI 팀이 아닙니다. 저희는 Backend.AI의 23.09 버전부터 제공된 모델 서비스를 한 층 강화하였고, 다양한 모델을 손쉽게 서비스할 수 있도록 개선하였습니다. 이번 포스팅을 통해 어떤 방법으로 쉽고 간편하게 다양한 모델을 서비스할 수 있는지 알아봅니다.

      이번 포스팅에서는 다양한 종류의 모델을 더욱 간편하게 서비스할 수 있는 기능을 소개합니다. 모델 서비스에 대한 설명은 23.09 버전 업데이트를 릴리즈하며 한 차례 드린 적이 있기 때문에, 자세한 설명은 생략하겠습니다. Backend.AI의 모델 서비스가 생소하시다면, 다음 포스팅을 먼저 읽어보시는 것을 추천합니다. Backend.AI Model Service 미리 보기

      기존 방식

      | | 필요조건 | 기존 방식 | 모델 배리언트(Model Variant) | |---|----------|------------|----------------------------------| | 1 | 모델 정의 파일(model-definitionl.yaml) 작성 | O | X | | 2 | 모델 정의 파일을 모델 폴더에 업로드 | O | X | | 3 | 모델 메타데이터 필요 | O | △* (일부는 자체 다운로드 가능) |

      Backend.AI 모델 서비스는 실행하기 위한 모델 메타데이터 외에 모델을 서비스할 때 실행할 명령어를 일정한 형식으로 담아둔 모델 정의 파일 (model-definition.yaml)을 필요로 했습니다. 서비스를 실행하는 순서는 다음과 같습니다. 모델 정의 파일을 작성하고, 모델 정의 파일을 읽을 수 있도록 모델(model) 타입 폴더에 업로드한 뒤, 모델서비스 시작시 모델 폴더를 마운트하면 자동으로 모델 정의 파일에 따라 엔드유저의 입력을 받아 모델로 전달하고, 응답 값을 보내주는 API 서버 등이 실행되는 형태였습니다. 하지만 이 방식은 모델 정의 파일을 수정할 때마다 파일에 접근해야한다는 단점이 있었습니다. 또, 이미 모델 정의 파일에 모델 경로가 정해져있기 때문에 모델이 달라질 때마다 모델 정의 파일을 다르게 작성해야 하는 것도 귀찮은 부분이었습니다. 이번에 선보이는 모델 배리언트(Model Variant)는 모델 정의 파일이 없이 모델 메타데이터만을 가지고 몇 가지 설정값을 입력하거나, 또는 아예 입력할 필요없이 즉시 모델을 서비스할 수 있는 기능입니다. 모델 배리언트에서는 커맨드(command), vLLM, 그리고 NIM(NVIDIA Inference Microservice) 방식을 지원합니다. 서비스하는 방법과 모델 서비스 실행을 확인하는 방법은 다음과 같습니다.

      이번에 선보이는 모델 배리언트(Model Variant)는 모델 정의 파일이 없이 모델 메타데이터만을 가지고 몇가지 설정값을 입력하거나, 또는 아예 입력할 필요없이 즉시 모델을 서비스 할 수 있는 기능입니다. 모델 배리언트에서는 커맨드(command) 방식, vLLM 방식, 그리고 NIM(NVIDIA Inference Microservice) 방식을 지원합니다. 서비스하는 방법과 모델 서비스 실행을 확인하는 방법은 다음과 같습니다.

      기본적으로, 모델 서비스는 서빙할 모델 메타데이터를 필요로 합니다. 가장 손쉽게 접할 수 있는 모델 메타데이터를 받을 수 있는 Hugging Face 에서 서비스할 모델을 다운로드 받아보세요. 이번 예제에서는 Hugging Face 의 Llama-2-7b-hf 모델과 Calm3-22b-chat 모델을 사용했습니다. 모델 메타데이터를 모델 폴더에 업로드 하는 방법은 앞의 포스팅의 모델 스토리지 준비를 참고하십시오.

      빌드된 이미지에서 자동으로 모델 서비스하기 (command 방식)

      첫 번째로 소개하는 커맨드 방식은 모델 정의 파일에서 모델을 서비스하기 위해 실행하는 명령어 부분이 실행 이미지에 들어간 형태입니다. CMD 라는 환경변수에 실행할 명령어를 지정한 뒤, 이미지를 빌드해 실제 모델을 서비스할 때 다른 입력 없이 바로 실행하는 방식이죠. 커맨드 방식은 서비스가 제대로 실행되고 있는지 확인하는, 이른바 Health check를 지원하지 않습니다. 따라서 대규모의 서비스를 수행할 때보다는 프로토타입으로 바로 서비스를 띄워서 확인해 볼 때 적절합니다. 실행방법은 다음과 같습니다.

      1. 시작화면에서 서비스할 모델 서비스에 해당하는 모델 메타데이터가 들어있는 모델 폴더를 마운트하도록 Model Storage To Mount 항목에서 Llama-2-7b-hf 를 선택하고, Inference Runtime Variant 항목에서 Predefined Image Command 를 선택합니다.

      모델 서비스를 별도의 토큰없이 접근할 수 있도록 제공할 경우 Open To Public 스위치 버튼을 활성화 해주세요.

      모델-서비스-시작화면-모델-메타데이터-마운트-및-CMD-선택

      1. 서비스할 환경을 선택합니다. 여기서는 vllm:0.5.0 를 사용하고, 자원은 CPU 4 Core, Memory 16 GiB, NVIDIA CUDA GPU 10 FGPU 를 할당하도록 설정했습니다.

      모델-서비스-시작화면-실행환경-선택-및-자원할당

      1. 마지막으로 클러스터 크기를 선택하고, 시작버튼을 클릭합니다. 클러스터 크기는 싱글노드, 싱글 컨테이너로 설정했습니다.

      모델-서비스-시작-화면-클러스터-크기-선택-및-시작

      서비스가 성공적으로 띄워졌다면, 서비스 상태는 HEALTHY 로 바뀌게 되고 엔드포인트 주소가 나오게 됩니다.

      모델-서비스-상세-화면

      서비스 확인하기

      서비스가 정상적으로 띄워졌다면, cURL 명령어로 서비스 모델명을 우선 확인합니다.

      curl https://cmd-model-service.asia03.app.backend.ai/v1/models \
      -H "Content-Type: application/json"
      

      모델명-확인하기

      이제 서비스에 보낼 입력을 cURL 명령어로 보내고, 응답값을 확인해보겠습니다.

      CMD로 실행하는 모델 서비스는 이미지에 이미 모델명이 정의되어 있기 때문에 모델명을 확인후 요청을 보낼 때 모델명을 model 키의 값으로 입력해야 합니다.

      curl https://cmd-model-service.asia03.app.backend.ai/v1/completions \
      -H "Content-Type: application/json" \
      -d '{
      "model": "image-model",
      "prompt": "San Francisco is a",
      "max_tokens": 7,
      "temperature": 0}'
      

      모델-서비스-요청-결과-화면

      vLLM 모드로 모델 서비스하기

      vLLM 모드는 앞에서 소개한 커맨드 방식과 비슷하지만, vLLM 을 실행할 때 입력하는 여러가지 옵션들을 환경변수로 작성할 수 있습니다. 실행방법은 다음과 같습니다.

      실행방법

      1. 시작화면에서 서비스할 모델 서비스에 모델 폴더를 마운트하고, Inference Runtime Variant 항목에서 vLLM 을 선택합니다.

      모델-서비스-시작-화면-모델-메타데이터-마운트-및-vLLM-선택

      1. 서비스할 환경을 선택합니다. 앞서 설명한 커맨드 방식과 동일하게 vllm:0.5.0 으로 선택하고, (자원은 동일하게 설정해도 되지만) 이번에는 CPU 16 Core, Memory 64 GiB, NVIDIA CUDA GPU 10 fGPU를 할당하도록 하겠습니다.

      모델-서비스-시작-화면-실행환경-선택-및-자원-할당

      1. 마지막으로 클러스터 크기를 선택하고 환경 변수 BACKEND_MODEL_NAME 을 입력합니다. 이 값은 vLLM에서 --model-name 옵션에 대응하는 값으로, 사용자가 서비스에 요청을 보낼 때 지정하는 model 값이 됩니다.

      모델-서비스-시작-화면-실행환경-선택-및-자원-할당

      마찬가지로 서비스가 성공적으로 띄워졌다면, 서비스 상태는 HEALTHY 로 바뀌게 되고, 서비스가 띄워진 엔드포인트 주소가 나오게 됩니다.

      모델-서비스-상세-화면

      서비스 확인하기

      서비스에 보낼 입력을 cURL 명령어로 보내고, 응답값을 확인해보겠습니다. 이 때 model 값은 아까 설정한 BACKEND_MODEL_NAME 값으로 입력합니다. 입력이 끝났다면 START 버튼을 클릭해서 서비스를 생성합니다.

      curl https://vllm-calm3-22b-chat.asia03.app.backend.ai/v1/completions \
      -H "Content-Type: application/json" \
      -d '{
      "model": "vllm-model",
      "prompt": "初めて会う日本人ビジネスマンに渡す最高の挨拶は何でしょうか?",
      "max_tokens":  200,
      "temperature": 0
      }'
      

      모델-서비스-요청-결과-화면

      NIM 모드로 모델 서비스하기

      NIM 을 실행하기 위해서는 NGC의 NIM 모델 레지스트리에 접근할 수 있는 계정으로부터 발행된 API 키가 있어야 합니다. 키값을 얻는 방법은 다음 내용을 참고하시기 바랍니다. NVIDIA Docs Hub : How to get NGC API Key

      NIM(NVIDIA Inference Microservice) 모드 역시 커맨드 모드와 유사하나, NVIDIA의 NIM을 지원하는 모델 서버가 내장된 이미지로 실행해야 합니다. 또, 모델을 불러올 때에, NGC API 키 값이 필요합니다. 모든 것이 준비되었다는 가정하에 모델 서비스를 시작해보겠습니다.

      실행방법

      1. 시작화면에서 서비스할 NIM 에서 받아올 메타데이터를 캐싱할 비어있는 모델 타입 폴더를 선택하고, Inference Runtime Variant 항목에서 NIM 을 선택합니다.

      모델-서비스-시작-화면-모델-폴더-마운트-및-NIM-선택

      1. 서비스할 환경을 선택합니다. 여기서는 ngc-nim:1.0.0-llama3.8b 를 사용하고, 자원은 CPU 8 Core, Memory 32 GiB, NVIDIA CUDA GPU 15 FGPU 를 할당하도록 설정했습니다.

      모델-서비스-시작-화면-실행환경-선택-및-자원-할당

      1. 마지막으로 클러스터 크기를 선택하고 환경 변수 HF_HOME으로 기본 경로인 /models 경로를 입력합니다. 그리고 NGC_API_KEY 을 입력하고, 발급받은 키값을 입력합니다. 입력이 끝났다면 CREATE 버튼을 클릭해서 서비스를 생성합니다.

      모델-서비스-시작-화면-클러스터-크기-선택-환경변수-입력-및-시작

      NIM 을 사용할 경우 모델 메타데이터를 저장소로부터 받아오기 때문에 처음 실행시에는 다소 시간이 소요될 수 있습니다. 세션 페이지에서 서비스중인 라우팅 세션에 대한 컨테이너 로그를 확인하여 진행상황을 확인할 수 있습니다. 모델-서비스에-대응하는-라우팅-세션 NIM-에서-데이터를-받고-있는-로그가-띄워진-컨테이너-로그-화면

      커맨드, vLLM 모드와 같이 서비스가 성공적으로 띄워졌다면, 서비스 상태는 HEALTHY 로 바뀌게 됩니다. 서비스가 띄워진 엔드포인트 주소를 활용해 서비스에 보낼 내용을 다음과 같이 입력하고, 응답값을 확인해보겠습니다.

      서비스 확인하기

      from openai import OpenAI
      
      client = OpenAI(
        base_url = "https://nim-model-service.asia03.app.backend.ai/v1",
        api_key = "$YOUR_NGC_API_KEY"
      )
      
      completion = client.chat.completions.create(
        model="meta/llama3-8b-instruct",
        messages=[
            {        
              "role":"user", 
              "content":"Hello! How are you?"
            },
            {
              "role":"assistant",
              "content":"Hi! I am quite well, how can I help you today?"
            },
            {
              "role":"user",
              "content":"Can you write me a song?"
            }],
        temperature=0.5,
        top_p=1,
        max_tokens=1024,
        stream=True
      )
      
      for chunk in completion:
        if chunk.choices[0].delta.content is not None:
          print(chunk.choices[0].delta.content, end="")
      

      모델-서비스-요청-결과-화면

      마치며

      모델 배리언트 기능은 이미 학습된 모델로 실질적인 서비스를 제공하는 것을 목표로 하는 연구자와 기업에 많은 도움이 될 것입니다. 강력한 자원 관리 시스템과 NVIDIA GPU, AMD ROCm, TPU, Graphcore IPU, Furiosa Warboy, Rebellions ATOM, Hyperaccel LPU 등과 같이 다양한 AI 가속기 지원을 바탕으로 한 Backend.AI 는 이제 단순히 모델을 학습하는 것을 뛰어넘어 서비스까지 쉽게 배포할 수 있는 통합 환경을 제공하게 되었습니다. Backend.AI 와 함께 여러분이 원하는 AI 모델을 언제든 서비스해보세요.

      11 July 2024

  • 사용자 스토리

    검색 결과가 없습니다.
  • 문화

    • 래블업의 파이콘 한국 2024 후기: lambda submit: Starbucks if submit == "duck" else None

      By 허진호

      안녕하세요, 래블업에서 Technical Writer로 일하고 있는 허진호입니다. 저희 래블업은 지난 10월 26일부터 10월 27일까지 수원 컨벤션센터에서 개최된 파이콘 한국 2024에 플래티넘 스폰서로 참여했습니다.

      래블업의 창업 이념은 오픈소스와 큰 연관이 있습니다. 래블업의 피에는 오픈소스가 흐르고 있다고 해도 과언이 아니죠. 다양한 오픈소스들이 있지만, 그중에서 래블업은 특히나 파이썬과 인연이 깊습니다. 래블업은 asyncio를 이용하여 개발된 aiohttp와 같은 오픈소스에도 적극적으로 기여하고 있고, 파이썬 그 자체에도 기여하고 있습니다. 파이썬뿐만이 아니라 파이콘과도 인연이 깊죠. 래블업의 구성원들은 그동안 전세계 파이콘에서 다양한 주제의 발표를 해 왔고, 파이콘 한국에는 총 다섯 번 후원사로 참여하며 그 인연을 이어오고 있습니다.

      이번 파이콘은 래블업에게도 뜻깊은 행사였습니다. 래블업의 신정규 대표와 김준기 CTO가 파이콘 양일 기조연설자로 나섰기 때문인데요, 신정규 대표는 'Python과 PyCon과 공룡시대와 닭들의 행성'이라는 주제로 발표를 진행했습니다. 언뜻 보면 혼란스러운 제목이지만, 진화에서 1차적으로 승리했던 공룡에 두 가지 파이썬의 성질을 비유한 것입니다. 하나는 파이썬의 급격한 성장과 1위 언어로의 등극, 그리고 엄청난 연산으로 혁신을 만들어내는 대 AI 시대의 핵심 언어라는 성질입니다. 이는 현대에서 가장 많이 소비되는 육류인 '닭'으로 연결되는데요, 특유의 접근성과 범용성으로 누구나 쉽게 배운 후에 활용할 수 있는 성질이 닭과도 같다는 뜻이었다고 하네요. 특유의 재치있는 제목과 말솜씨, 다양한 AI 생성 그림으로 청중을 휘어잡은 신정규 대표의 발표는 청중의 많은 호응을 받았습니다.

      김준기 CTO는 '파이콘과 나의 10년 돌아보기'라는 주제로 발표를 진행했습니다. 총 4개의 챕터로 구성된 이번 발표는 세계 각지에서 파이콘과 함께했던 발표를 돌아보며 asyncio와 함께 했던 성장으로 시작해 확장되는 회사의 규모, 그리고 코드의 확장에 대응해나가는 과정, 어떻게 하면 다른 파이써니스타들에게 영감을 줄 수 있을지에 대해 다뤘습니다. 개발자라면 마주했던, 혹은 마주할 수 있는 문제를 쉽게 풀어내 대중의 많은 박수를 받았습니다.

      래블업 조규진 선임 소프트웨어 엔지니어, 세르게이 렉시코브 리서처, 김준기 CTO

      또한 조규진 래블업 선임 소프트웨어 엔지니어와 세르게이 렉시코브 리서처, 김준기 CTO가 각각 세션 발표를 진행했는데요, 조규진 선임 소프트웨어 엔지니어는 '자동화된 파이썬 웹 프레임워크 API Schema 제작기: The long way around'를 주제로 aiohttp를 사용하며 겪었던 API 문서 자동 생성의 어려움을 극복하기 위해 거쳤던 일련의 삽질기를 청중과 공유했습니다. 세르게이 렉시코브 리서처는 'Automating CLI commands execution with LLM and LangGraph: A new frontier in Python automation'이라는 주제로, 복잡한 CLI를 LLM과 LangGraph 프레임워크를 사용하여 사용자 친화적인 도구로 변환하여 사용자 경험과 운영 효율성을 향상시키는 방법에 대해 발표했습니다. 두 발표 모두 많은 청중을 모으며 뜨거운 관심을 받았습니다. 김준기 CTO 역시 세션 발표를 통해 '엔터프라이즈 공급을 위한 파이썬 엔지니어링'이라는 주제로 파이썬 앱 공급을 위한 패키징/인스톨러 개발 사례를 나눴습니다.

      👨‍🏫 허진호: 파이콘 세션 발표 후기가 궁금합니다.

      👨‍💻 세르게이 렉시코브: 발표를 영어로 진행했음에도 파이콘 한국 측에서 실시간 통번역 시스템을 지원해주었기 때문에 문제 없이 발표를 마칠 수 있었습니다. 세션이 끝나고 나서 몇몇 열성적인 청중들이 다가와 발표 주제에 대한 질문을 했던 점이 가장 기억에 남습니다.

      'AI 그림 판독기' 이벤트 (오리와 백조 그리기)

      래블업은 이번 파이콘 한국 2024의 부스 이벤트로 'AI 그림 판독기' 이벤트를 개최했습니다. 파이콘 한국 2024에 참여한 참가자들은 QR코드를 통해 개개인의 휴대전화 혹은 태블릿, 노트북에서 이벤트 페이지에 접속해 '오리와 백조'를 그려 경품에 도전할 수 있었습니다. 참여만 해도 래블업 폴딩 파우치를 받을 수 있었고, 종합 1등을 한 참가자는 스타벅스 기프트카드를 받아갈 수 있는 아주 멋진 이벤트였죠.

      래블업이 행사마다 들고 다니는 스티커

      왜 하필 오리와 백조냐고요? 저희가 행사에 항상 가져다니는 스티커에는 귀여운 오리와 백조가 그려져 있습니다. 이 친구들은 물 위에서는 도도하게 떠 있지만, 수면 밑에서는 물위에 떠 있기 위해 열심히 발을 휘젓고 있는 것으로 알려져 있는데요, 우리 스티커 역시 고객이 도도하게 수면 위에서 AI 서비스를 하는 동안 Backend.AI가 그 밑의 일을 담당하겠다는 비유적인 의미를 가지고 있죠.

      이벤트의 내용은 간단합니다. 텍스트를 입력하면 그림을 생성해 주는 생성형 AI를 이용하여, 주어진 그림과 가장 가까운 그림을 그려내는 이벤트죠. 아마 Stable Diffusion이나 Dall-E 같은 생성형 AI 솔루션을 이용해 그림을 그려본 분들이라면 아시는 내용이겠지만, 생성형 AI는 입력에 따라 출력이 결정되는 매우 민감한 구조를 가지고 있습니다. 같은 입력값을 활용해도 매 번 출력값이 달라지기도 하고, 약간만 입력을 변형해도 전혀 다른 결과가 나오기도 하죠. 이처럼 원하는 결과물을 생성해내기 위해 생성형 AI를 가르치는 (안내하는) 과정을 우리는 '프롬프트 엔지니어링'이라고 부릅니다. 저희 부스에서 이벤트를 참여하신 모든 분들은 '나만의 작은 프롬프트 엔지니어링' 과정을 체험해 보신 셈입니다.

      우리의 'AI 그림 판독기' 이벤트 백엔드 개발을 담당했던 조규진 선임 소프트웨어 엔지니어에게 개략적인 설명을 부탁드렸습니다.

      👨‍🏫 허진호: 'AI 그림 판독기' 이벤트 페이지가 어떻게 만들어졌는지 설명 부탁드립니다.

      👨‍💻 조규진: 'AI 그림 판독기' 이벤트 페이지 백엔드는 총 세 가지의 마이크로서비스로 구성되었습니다. 첫 번째는 WAS (Web Application Server), 두 번째는 이미지 생성 파이프라인, 세 번째는 이미지 유사도 판별 파이프라인입니다. WAS는 사용자 데이터베이스와 이미지 생성 요청 처리 API로 구성되어 있습니다. 이 모든 마이크로서비스는 Backend.AI에서 'Model Service' 기능을 통해 배포되었습니다. 저희 리서치 팀의 세르게이님이 만드신 Visutale 데모처럼, 저희 Backend.AI에서 AI 서비스 개발의 모든 것이 가능하다는 데모의 성격으로 봐 주셔도 좋을 것 같습니다.

      👨‍🏫 허진호: 구체적으로 어떤 프로세스를 통해 사용자의 그림과 주어진 그림과 유사도가 나오게 되는 것인가요?

      👨‍💻 조규진: 사용자가 QR 코드를 통해 접속한 페이지에서 프롬프트를 입력, 이미지 생성을 요청하면 WAS가 이미지 생성 서비스에 텍스트를 전달하고, 생성된 이미지를 반환받습니다. WAS는 생성된 이미지를 다시 유사도 판별기에 전달하고, 유사도 판별기로부터 퍼센트로 계산된 유사도를 돌려받아 사용자에게 생성된 그림과 함께 전달합니다.

      👨‍🏫 허진호: 어떤 기준으로 그림을 그려야 높은 점수를 받을 수 있나요?

      👨‍💻 조규진: 이미지 유사도 판별 파이프라인이 무슨 기준으로 유사도를 판별하는지는 저도 알 수 없습니다. 아마 AI에게 직접 물어보는 것이 답변을 얻는 더 좋은 길일지도 모릅니다.

      어마어마한 참여도

      사실 모든 서비스를 만들어낸 당사자들이 그렇듯이 저희 구성원들은 이 이벤트를 '소소한 이벤트'라고 생각했습니다. 그러나 그 생각이 깨지는 데는 한 시간이 채 걸리지 않았습니다.

      래블업 부스에는 사람들이 몰리기 시작했고, 부스 앞에는 본인의 순위를 확인하고 상위권을 사수하기 위한 사람들이 리더보드를 목빠져라 쳐다보고 있는 진풍경이 연출되었습니다.

      심지어 라운지에 앉아 있는 사람들이 휴대전화 화면을 뚫어져라 쳐다보며 백조를 그리고 있었다는 증언도 있었죠.

      통계를 살펴볼까요?

      10월 26일, 27일 양일간 이벤트에 참가하신 분은 총 428분이었습니다. 해당 기간 제출된 이미지 생성 요청은 '11639'건에 달했습니다. 이 중에서 한 사람이 제출한 최대 응답은 1000여건을 훌쩍 뛰어넘어 모두를 경악하게 했답니다. (비밀은 뒤에...)

      의도치 않은 부작용도...

      부스에 앉아 리더보드를 살펴보고 있는 와중에 익숙한 두 개의 닉네임이 눈에 띄었습니다. 'cloudshin' 과 'achimnol' 각각 신정규 대표와 김준기 CTO가 갑자기 불이 붙어서 90% 이상의 유사도 점수를 내고 계신 겁니다. 두 분은 점심을 드시러 이동하는 와중에도 계속해서 끝없이 오리를 그려내고 계셨답니다.

      보다못한 유우영 DevRel Lead님이 이를 말리고 나섰으나, 두 사람의 열정은 쉽게 말릴 수 없었다는 후문이 전해집니다. (P.S.1: 물론 점수를 집계할 때 두 분의 데이터는 강제로 지웠답니다.) (P.S.2: 사실 참가자 분들이 워낙에 훌륭하셔서 이 두 분의 점수를 손쉽게 넘어서는 압도적인 포디움을 만들어 내셨답니다...)

      내부적인 부작용(?) 이외에 외부에서의 문제도 발생했습니다. 1일차 부스를 운영하던 중, 어디선가 개발자의 외마디 비명이 들립니다.

      "누가 매크로를 돌리고 있는 것 같은데요?"

      확인해보니 1~5초 간격으로 계속해서 동일한 프롬프트로의 중복 제출 요청이 들어오고 있었습니다. 같은 프롬프트를 넣어도 매 번 결과물이 조금씩 달라지는 생성형 AI의 특징을 이용한 매크로였죠. 그러나 문제가 식별된 당시에 서비스를 수정하기는 어려웠고, 백엔드를 담당한 개발자는 2일차 파이콘 발표가 예정되어 있었기에 즉각 대응이 어려웠죠. 상황은 점점 나빠져만 갔습니다.

      "제출이 안돼요" "버튼이 안 눌려요" "이미지가 대신 회색 빈 칸만 나와요"

      개발자들의 축제인 파이콘답게, 누군가는 노트북으로 우리 사이트를 열고, 개발자도구를 보여주며 요청이 들어가고 있지 않은 것 같다고 이야기해주기까지 했습니다. 발표준비를 하러 구석에 숨어있는 개발자를 찾아갔고, 아까의 매크로가 우리의 H100을 향해 엄청난 양의 리퀘스트를 쏟아내고 있었습니다. 그렇게 매우 느린 속도로 이미지를 제출하고 있는 사람들을 뒤로 하고 1일차 행사가 끝났습니다. 부스를 정리하며 1일차 Recap을 진행했고, 2일차 행사에는 이런 문제를 원천적으로 막아야 한다는 결론이 도출되었습니다.

      불쌍한 개발자는 2일차 행사를 위해 밤을 새워가며 발표 준비도 미루고 두 가지의 새로운 기능을 추가해 이런 사태를 미연에 방지하고자 했답니다.

      첫째, 동일 프롬프트 제출 방지 기능 추가

      서버단에서 제출한 프롬프트를 검증하는 기능을 추가했습니다. 동일한 프롬프트가 제출된 이력이 있는 경우, 새로운 이미지를 그리지 않고 최초 생성된 이미지와 해당 이미지의 유사도 점수를 그대로 응답하도록 변경했습니다.

      둘째, 이미지 제출 시 캡챠 추가

      매크로를 방지하기 위해 응답 제출 시 캡챠를 누르도록 변경했습니다. 참가자들이 약간 더 귀찮아지긴 했겠지만, 캡챠를 추가한 것으로 행사 2일차에는 무작위 매크로가 발생하지 않았답니다.

      그 외 소소한 개선 사항들

      참여자의 등수 계산을 위해 꽤 자세한 소숫점 단위까지 받아오고 있었지만, 사용자 편의상 GUI상에서는 소숫점 첫째 자리에서 잘라 보여주고 있었습니다. 그러나 경쟁이 과열되며 소수점 첫째 자리까지 똑같은 점수를 받은 사람들이 나타나기 시작했죠. 이에 따라 사용자들의 혼란을 줄이기 위해 소숫점 둘째 자리까지 GUI상에 보여주는 패치를 진행하기도 했습니다.

      성공적인 이벤트를 위해 불철주야 백엔드를 담당해준 조규진 선임 엔지니어와 김수진 프론트엔드 엔지니어에게 감사의 말씀을 전합니다 🙂

      파이콘 한국 2024를 마무리하며

      수많은 파이써니스타 분들이 파이콘 한국 2024를 찾아주셨고, 래블업도 수많은 파이써니스타 분들을 만나러 현장에 함께했습니다. 래블업은 앞으로도 끊임없이 오픈소스 커뮤니티에 기여하고, 함께 성장해나갈 것입니다. 최근에 큰 인기를 끌었던 <흑백요리사>라는 프로그램에서 정지선 셰프가 이런 말을 합니다. "저는 레시피를 오픈해요. 레시피를 오픈하면 그만큼 레시피가 또 생겨요. 사람들이 아이디어를 많이 제공하거든요. 큰 그림을 그리는 거죠."

      래블업도 언제나 우리를 이루고 있는 근간인 오픈소스 정신을 잊지 않고 계속해서 큰 그림을 그려나가겠습니다.

      20 November 2024

    • 자연으로부터 다시 배우기: 뉴로모픽 컴퓨팅과 딥 러닝

      By 신정규

      이 글은 2022년 5월 ESC 과학기술뉴스 에 기고된 글입니다.

      인공 신경망 분야가 본격적으로 주목 받기시작한 지 곧 10년이 됩니다. 그 길지 않은 시간 동안 인공 신경망 분야는 딥 러닝의 발전과 함께 엄청난 속도로 무수한 문제들을 해결하고 있습니다. 인공 지능 구현에 있어 가장 가능성이 높은 방법으로 꼽히고 있기도 합니다.

      그 첨단에서는 하이퍼스케일 딥 러닝 모델과 그 구현 방법에 대한 다양한 뉴스들이 주목 받고 있습니다. 2022년 4월 엔비디아의 새로운 GPU인 H100의 소식이 뉴스라인을 뒤덮었고, AMD의 고성능 컴퓨팅 특화 GPU인 MI 시리즈와 함께 인텔의 새로운 GPU인 폰테 베키오가 AI와 블록체인 채굴 가속 성능을 엄청나게 올려 하이퍼스케일 AI의 새 격전지를 만들 것으로 예상되고 있습니다.

      하이퍼스케일 인공지능의 붐에 묻힌 소식들 가운데 대중적으로 크게 관심을 끌지 못했던 뉴스가 있습니다. 바로 작년 10월 인텔이 발표한 로이히(Loihi) 2 칩 소식이었습니다[1]. 이 소식은 굉장히 흥미로운 역사와 기술적 배경을 안고 있습니다. AI 훈련 및 서비스 가속 칩들이 늘어나는 와중에 일어나고 있는 재미있는 기술 뉴스 뒤에 숨어 있는 과학에 대해 소개해 보고자 합니다.

      딥 러닝으로 지성을 코딩할 수 있을까?

      GPU 기반의 행렬 연산 가속으로 날개를 달기 시작한 2013년 이후, 딥 러닝 분야는 연산 규모에 힘입은 다양한 가능성을 탐구하기 시작했습니다. 2016년의 알파고 쇼크를 기점으로 딥 러닝은 연구 분야를 넘어서 그 범위를 응용 분야로 조금씩 확장하기 시작했습니다. 2017년에 제안되고 2018년부터 그 사용이 본격화된 트랜스포머 모델 구조[2]는 어텐션 및 셀프 어텐션이라는 개념을 도입해 딥 러닝 모델이 스스로의 기억 구조를 만드는 과정을 크게 개선했습니다. 트랜스포머 모델 구조는 이후 엄청나게 다양한 분야의 딥 러닝 모델에 사용되고 있으며, 특히 데이터가 풍부한 자연어 처리 및 이미지 처리 분야에서 두각을 나타내고 있습니다. 트랜스포머는 기존의 딥 러닝 모델이 효과적으로 동작하지 않는 것처럼 보이던 다양한 문제들을 딥 러닝 모델로 해결할 수 있게 해 주었습니다.

      만능처럼 보이는 이 모델은 2018년부터 딥 러닝 모델의 거대화 추세를 이끌기 시작했습니다. 딥 러닝 모델의 크기는 모델의 매개 변수의 수로 결정되는데, 딥 러닝의 매개 변수는 모델을 구성하는 퍼셉트론 사이의 연결 정보이며, 실제 뉴런의 시냅스 연결에 해당합니다. 연결이 많을수록 딥 러닝 모델은 더 복잡한 입력을 구분하고 판단할 수 있게 됩니다. 딥 러닝 모델이 복잡해지고 거대해질수록, 매개 변수는 기하급수적으로 늘어납니다. 2019년 이전까지의 딥 러닝 모델 매개 변수의 수는 해마다 대략 3 ~ 5배씩 증가해 왔지만, 2019년 이후에는 해마다 열 배 이상씩 증가하고 있습니다. 최근 약 2 ~ 3년 동안 등장한 거대 딥 러닝 모델들을 ‘하이퍼스케일 AI’라고 부르기도 합니다. 자연어 처리 분야에서 대중에게 잘 알려진 하이퍼스케일 딥 러닝 모델로는 OpenAI의 GPT-3, Google의 LaMDA 등이 있습니다. 이러한 거대 모델의 경우, 예를 들면 GPT-3의 경우에는 모델 훈련을 위한 시스템 비용(장비 구입 없이 클라우드상에서 훈련 한 번 시키는 비용)으로 최소 약 50억 원 이상이 들어가는 것으로 추산됩니다[3].

      하이퍼스케일 모델들은 기존에 풀기 어렵거나 풀지 못했던 문제들을 풀어내고 있습니다. 중력 렌즈를 새로 발견하거나[4] 렌즈로 인해 생긴 왜곡을 펴서[5] 우주의 신비를 풀기도 하죠. 기존의 방법보다 훨씬 더 짧은 시간과 적은 비용으로 단백질의 접힘 구조를 예측하기도 하고[6], 신약을 찾아냅니다[7]. 오랜 시간에 걸쳐 흐름을 파악해야 하는 스타크래프트 2 전략 시뮬레이션 같은 문제[8]를 풀기도 합니다.

      이렇게 여러 가지 문제를 해결해 주다 보니 당연히 따라오는 궁금증들이 있습니다. 과연 막대한 양의 자원을 부어 넣어 딥 러닝 모델을 만드는 이러한 접근은 지속 가능할까요? 그리고 이러한 방법으로 '지성'을 코딩할 수 있을까요?

      이 두 질문에 답하기 위해 딥 뉴럴 네트워크부터 오늘의 주제인 뉴로모픽 컴퓨팅까지 빠르게 한 번 이해해 보겠습니다.

      딥 뉴럴 네트워크: 태생과 차이점

      사실 딥 러닝은 줄임말입니다. 원래는 딥 뉴럴 네트워크(Deep Neural Network, DNN), 더 풀어서 쓰면 Artificial Neural Network with deep layers (심층 인공 신경망)입니다. 인공 신경망 이론은 신경 세포의 전기적 특성을 수학적으로 모사하는 과정에 뿌리를 두고 있습니다. 신경 세포의 전기적 특성과 함께 신경 세포 사이의 연결 구조가 정보 처리 과정에서 강화 또는 약화되는 가소성[e1]을 수학적으로 모사하고, 이를 단순화하면서 시작되었죠. 인공 신경망 모델은 신경 세포들의 연결에 따른 활성 과정을 엄청나게 단순화한 퍼셉트론[9]과, 신경 세포의 발화 과정을 모사하는 함수에서 시간 의존성을 제외하고 신경 세포로의 신호 입력에 대한 함수로 단순화한 활성 함수, 마지막으로 신경 세포 사이의 연결이 얼마나 강한지를 나타내는 가중치를 매개변수로 나타내는 수학적 모델입니다.

      인공 신경망 이론은 실제 신경망의 특징에 뿌리를 두고 있긴 하지만 실제 신경망과는 근본적인 차이가 있습니다. 바로 시간에 따른 동작을 결정하는 동역학의 유무입니다. 실제 신경망은 신경 세포들 간의 동역학에 의해 다양한 결과들이 결정됩니다. 신경 세포는 외부로부터 자극을 받았을 때의 각각의 동역학적 특성이 있고, 그에 따라 물리적으로 강화 또는 약화되는 방식의 가소성이 있습니다. 가령 어떤 판단을 내릴때 계속 같이 사용되고 연결된 신경세포들은, 입력 신호를 받았을 때 비슷한 시점에 활성화됩니다. ‘시간적으로’ 비슷한 시점에 활성화된 신경 세포들 사이의 연결에 해당하는 축삭이 물리적으로 두꺼워지는 것을 발견할 수 있습니다. 반면 일반적인 인공 신경망은 동역학 대신 역전파 이론을 이용하여 가소성을 모사합니다. 역전파 이론은 어떤 판단을 바르게 내릴 때 사용된 퍼셉트론 사이의 연결의 가중치를 강화하는 계산을 간단하게 할 수 있는 방법입니다. 인공 신경망에서 입력되는 정보를 처리는 과정은 퍼셉트론 사이의 가중치를 이용하므로 즉각적입니다. 입력 정보가 출력 정보로 이어지는 과정이 시간에 따른 함수로 계산되지 않으므로, 동역학 요소가 없습니다.

      동역학 외에도 다양한 차이가 있습니다. 이런 차이는 대개 생물학적 신경망에서는 불가능한 가정들을 도입해서 생긴 것으로, 1990년대 인공 신경망 이론의 한계를 극복하기 위한 노력의 결과입니다. 활성 함수에 ReLU[e2]를 사용한 것이 하나의 예입니다. 일반적인 신경 세포는 역치와 가중치 한계가 존재합니다. 무한대의 활성값은 물리적으로 불가능하기 때문입니다. 그래서 수학 모델도 활성함수로 역치와 가중치 한계를 잘 보여주는 함수를 사용했습니다. 허나 심층 인공 신경망이 깊어지면서 연구자들은 인공 신경망 훈련이 더 이상 진행되지 않는 것을 발견하였습니다.[e3]ReLU 활성함수는 물리적으로는 불가능하지만 수학적으로 무한대의 가중치를 가질 수 있습니다[e4]. ReLU를 심층 인공 신경망에 도입하면서 새로운 훈련이 가능해졌고 생물학적 신경망과의 차이는 커졌습니다.

      동역학을 고려할 필요가 없는 인공 신경망은 행렬 연산의 연속으로 변환이 가능하기에 엄청난 속도로 계산이 가능합니다. 하지만 생물에서 볼 수 있는 신경망과는 큰 차이가 생겼습니다. 그러면 딥 러닝 모델과 실제 우리의 뇌 속에서 일어나는 신경학 과정은 이제 완전히 다른 토대 위에 서 있는 걸까요?

      자연으로부터 다시 배우기: 뉴럴 네트워크의 동역학

      단일 신경세포는 다양한 방법으로 신호를 주고 받습니다. 일부는 전기적 신호이고 일부는 화학적 신호입니다. 단일 신경 세포 안에서의 전기적 신호 특성은 굉장히 일찍 해석되고 수식화 되었으며[10], 퍼셉트론의 이론적 기반이 되었습니다. 문제는 단순화 없이 동역학을 계산하기엔 그 수식이 너무 복잡하다는 점이었습니다. 이후 시간에 따른 전기적 반응을 계산적 부담을 줄일 수 있게 어림한 다양한 수학 모델이 제안되었고, 이러한 모델을 사용하여 다양한 단일 신경 세포 시뮬레이터들이 공개되고 있습니다. 대표적인 시뮬레이터로는 NEURON[11]이 있습니다.

      앞서 동역학의 모사에는 엄청난 계산량이 필요하다고 했습니다. 어느 순간 우리는 연산 성능이 넘쳐나는 시대를 맞이하고 있습니다. 넘쳐나는 연산 성능을 바탕으로 이러한 단일 신경세포 시뮬레이션들을 이어붙이면 어떻게 될까요?

      엄청난 계산량으로 인한 연산 속도 문제를 해결하고 동역학 기반의 인공 신경망을 만들기 위한 방법으로 알고리즘과 하드웨어, 두 가지 측면에서의 시도가 있습니다. 알고리즘 측면의 접근은 스파이킹 뉴럴 네트워크(spiking neural network, SNN)으로, 실제 신경세포에서 발생하는 스파이크 기반의 가소성을 도입하여 동역학 모델 기반의 인공 신경망을 만들어 보려는 것입니다. 하드웨어 측면의 접근은 2012년부터 본격화된 뉴로모픽 컴퓨팅입니다. 신경 세포에 해당하는 물리적 객체를 만드는 방법으로 인공 신경망을 구현하는 것입니다. 동역학 모사에 들어가는 엄청난 계산량을 범용 연산으로 해결하기에는 아직도 컴퓨터가 느립니다. 이걸 해결하기 위해 아예 회로 수준에서 신경 세포에 해당하는 수학적 특성을 갖는 객체를 만들거나 하드코드로 연산을 만들어 넣은 전용 소자를 만들면 어떨까 하는 방법이죠. 최근에는 뉴로모픽 컴퓨팅과 SNN을 구분하지 않고, SNN을 소자 수준에서 구현하는 방식을 뉴로모픽 컴퓨팅으로 부르는 등의 통합이 이루어지고 있기도 합니다. 두 가지 접근 모두 기존의 인공 신경망 이론이 사용하지 않았던 동역학 특성을 모사하여 새로운 현상이나 딥 러닝의 가능성을 찾으려는 시도입니다.

      뉴로모픽 컴퓨팅 분야에서 두각을 나타내고 있는 회사 중 한 곳이 인텔입니다. 인텔은 2017년 가을 약 13만 개의 뉴런과 1억 3천만 개의 시냅스를 내장한 연구용 뉴로모픽 칩인 로이히Loihi[e5] 칩을 공개했습니다. 로이히 칩을 사용하여 기존의 DNN 기반 알고리즘을 이식한 후 다양한 비교 테스트를 수행했고[12], 재미있게도 SNN을 사용해서도 DNN과 비슷한 결과를 얻을 수 있다는 걸 보였습니다.

      인텔은 이후 여러 개의 로이히 칩을 연결하여 거대한 SNN 시스템을 만들었고, 나우쿠(Nahuku)는 41억 개의 시냅스를, 포호이키 스프링(Pohoiki Springs) 뉴로모픽 슈퍼컴퓨터[13]는 768개의 로이히 칩을 바탕으로 약 1억 1백만 개의 뉴런과 1천억 개의 시냅스를 구현했습니다. 이 과정에서 인텔은 SNN를 로이히 위에서 구현하는 소프트웨어 스택을 만들어냈으며, 그 결과 작년 가을에 로이히 2와 함께 뉴로모픽 어플리케이션을 개발할 때 사용할 수 있도록 라바(Lava) 오픈소스 소프트웨어 프레임워크를 공개했습니다[14].

      DNN과 SNN이 비슷한 결과를 보여주리라는 것은 예상되어 있었습니다. 물리학적으로 보면 인공 신경망이 다양한 문제를 추론하는 과정은 결국 정보 기반으로 초 고차원의 불연속 상태 공간을 정의한 후, 새로운 정보를 그 공간에 투사하는 것입니다. DNN과 SNN 모두 초고차원의 불연속 상태 공간을 정의할 수 있는 특성이 있죠. 생물은 진화를 통해 정보에 적응하는 특성을 물리적으로 만들어냈고, 인류는 생체모방공학(Biomemetics)을 통해 인공 신경망 이론을 창안해 내고 딥 러닝을 발전시켰습니다.

      늘 그랬듯이 언제나 답을 찾는

      지금까지 우리는 신경세포를 동역학 수준에서 모사한 네트워크로도 실제 우리가 딥 러닝에 기대했던 것과 비슷한 결과를 얻을 수 있다는 것을 알게 되었습니다. 그러면 이에 따라 나오는 의문이 있습니다. 결과가 비슷하다면 굳이 SNN과 뉴로모픽 컴퓨팅을 쓸 필요가 있을까요? 오늘 소개한 것들은 다양한 시도들의 극히 일부입니다. SNN과 뉴로모픽 컴퓨팅이 기존의 접근과 어떤 다른 결과를 만들어내는지는 계속 연구되고 있습니다. SNN이 더 나은 성능을 보이는 결과 또한 로보틱스 및 센서를 중심으로 등장하고 있으며, 동역학적 특성을 반영하는 것이 인과관계 유추에 더욱 강력할 것이라는 연구 결과도 나오고 있습니다. 더 깊게 들어가서 시냅스에서 일어나는 화학적 신호를 시뮬레이션하는 시도[15]도 있습니다. 신경망의 연결 구조에 더하여, 신경망을 구성하는 개별 요소에 우리가 아직 모르는 지능의 창발을 불러오는 요소가 있을지도 모르기 때문입니다. 그런데 이 정도로는 굳이 왜 SNN을 사용하는가에 대한 답변으로 부족할 것입니다.

      글 서두에서 드렸던 두 가지 질문을 다시 해 보겠습니다. 막대한 양의 자원을 부어넣어 딥 러닝 모델을 만드는 이러한 접근이 지속 가능할까요? 그리고 이러한 방법으로 '지성'을 코딩할 수 있을까요? 뉴로모픽 컴퓨팅이 답이 될 수 있을까요? 그럴 수도 있고, 아닐 수도 있습니다.

      DNN과 SNN이 제각기 높은 성능과 결과를 보이는 이유는 결국 두 구현체 모두 우리가 지금은 모르는 정보 최적화 이론이 그 바탕에 있기 때문일 것입니다. 그걸 알게 된다면, 우리는 AI를 다른 방식으로 구현할 수도 있을 것입니다. 처음에 드린 의문인 "막대한 양의 자원을 부어넣어 딥 러닝 모델을 만드는 이러한 접근이 지속 가능할지"에 대한 답을 얻는 하나의 길이 될 수도 있겠습니다. 뉴로모픽 컴퓨팅과 SNN은 새로운 관점에서 우리가 이 문제를 뜯어볼 수 있게 해 줍니다.

      그리고 두 번째 질문에 대한 답이 될 수도 있을 것입니다. 우리는 언제나 가슴속에 질문 하나를 안고 삽니다. '우리는 누구인가?' 뉴로모픽 컴퓨팅과 SNN의 접근은 우리가 이 근본적인 철학적 질문에 물리적으로 접근할 때 가장 이해가 쉬운 방법입니다. 우리가 이미 알고 있는 (그렇지만 그 얼개는 아직 모르는) 시스템으로 설명하기 때문입니다.

      뉴로모픽 컴퓨팅 외에도 다양한 분야에서 위의 두 질문에 대한 대답에 도전하고 있습니다. 그중 한 가지는 양자 컴퓨팅인데요, 다음에 양자 컴퓨팅와 딥 러닝에 대한 기사를 같이 읽어 볼 기회를 만들어 보겠습니다.

      참고 문헌

      • [1] https://www.anandtech.com/show/16960/intel-loihi-2-intel-4nm-4
      • [2] https://arxiv.org/abs/1706.03762
      • [3] https://lambdalabs.com/blog/demystifying-gpt-3
      • [4] https://iopscience.iop.org/article/10.3847/1538-4357/abd62b
      • [5] https://academic.oup.com/mnras/article-abstract/504/2/1825/6219095
      • [6] https://www.nature.com/articles/s41586-021-03819-2
      • [7] https://www.frontiersin.org/articles/10.3389/frai.2020.00065/full
      • [8] https://www.deepmind.com/blog/alphastar-mastering-the-real-time-strategy-game-starcraft-ii
      • [9] https://doi.apa.org/doi/10.1037/h0042519
      • [10] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1392413
      • [11] https://neuron.yale.edu/neuron
      • [12] https://ieeexplore.ieee.org/document/8259423
      • [13] https://arxiv.org/abs/2004.12691
      • [14] https://www.intel.com/content/www/us/en/newsroom/news/intel-unveils-neuromorphic-loihi-2-lava-software.html
      • [15] https://www.ibm.com/blogs/research/2016/12/the-brains-architecture-efficiency-on-a-chip

      미주

      • [e1] 가소성Plasticity은 외부의 환경 변화나 자극에 의하여 스스로가 적응하여 특성을 변경하는 능력입니다.
      • [e2] Recified Linear Unit의 약자입니다. 0보다 크면 y=x 함수 모양이 되는 활성함수로, x값에 따라 y가 계속 커질 수 있습니다.
      • [e3] Vanishing Gradient라는 문제입니다.
      • [e4] 신경세포는 점점 더 큰 입력을 받아도 세포의 물리적 한계 이상의 출력을 내 보낼 수가 없습니다. 전선에 전류를 무한정 흘릴 수 없는것과 마찬가지입니다. ReLU는 입력을 주는대로 출력이 그에 따라 선형적으로 무한정 증가하는 함수입니다.
      • [e5] 인텔은 뉴로모픽 칩 및 시스템에 하와이의 다양한 지명을 코드네임으로 붙이고 있습니다.

      27 June 2024

    • [특집] Scale entanglement

      By 신정규

      이 글은 2023년 5월 Crossroads 에 기고된 글입니다.

      원래 글 순서는 2023 > 2015 > 2020 > 2017 > 2018 > 2019 > 2021 > 2022 > 2023
      으로 쓰인 글입니다. 감정적 흐름은 그 순서를 따라가지만, 독자의 이해를 위해 시간순으로 재편집했습니다.

      2023년이 지나면 3월 14일은 파이의 날이 아니라 챗봇의 날이라고 불릴지도 모른다.

      그동안 창고에 있었던 모든 언어모델 들이 세상에 동시에 뛰쳐나온 날이었다. 구글의 PaLM 파인 튜닝 + 생성 모델의 Vertex AI 공개부터 시작하여 OpenAI의 GPT-4 발표, 마이크로소프트의 Bing이 이미 GPT-4를 사용 중임을 공식화, Anthropic의 claude 봇 정식 공개까지 모두 12시간 안에 일어난 날이었다.

      그날 오전 OpenAI에서 공개한 GPT-4 테크 리포트를 리뷰한 후, 기술적으로 인상적이었던 점에 대한 글을 페이스북[1] 글에 남겼다. 댓글이 달렸다. "내 생전에 이게 될까 하던 것들이 현실화하는 걸 보는 기쁨과 아픔이 있습니다.." 답글을 남겼다. "이젠 아무도 튜링 테스트에 관심이 없죠. 1년 사이에 와우포인트 없이 당연히 넘는 거 아니야? 가 되었어요."

      막상 키보드를 마주하니 지식을 정리하는 일은 이미 사람의 손을 떠난 것 같다. 기록의 의미를 찾아 사람의 이야기를 두드려본다.


      외계어가 안 되도록 인공 신경망에 대하여 이 글을 이해하는데 필요한 내용만 짚고 가자.

      신경세포(뉴런) 사이의 연결을 모사한 프로그램을 인공 신경망이라고 부른다. 뉴런 들을 층으로 묶고, 이를 겹치면서 앞뒤 층의 뉴런들과 연결을 만드는 식으로 설계한다. 딥 러닝은 인공 신경망 내의 층 개수가 많을 때 붙이는 표현이다. 다양한 인공 신경망 결과물 들을 딥 러닝 모델이라고 하며, 좀 있어 보이도록 그냥 AI 모델이라고도 한다.

      뉴런 간의 연결 강도들을 파라미터라고 한다.[2] 연결 강도의 개수를 파라미터 수라고 한다. 파라미터 수가 많을 수록 차지하는 메모리가 늘어나므로 모델이 커진다는 표현을 쓴다. 인공 뉴런들을 연결하고 입력 데이터에 대한 출력이 원하는 형태가 나오도록 뉴런 사이의 연결 강도를 조정하는 것을 모델 훈련이라고 부른다. 훈련이 끝난 인공 신경망은 엄청나게 높은 차원의 불연속 상태 공간을 흉내 낼 수 있게 된다.

      여기 까지가 기본 용어이다. 그럼 언제 이야기부터 떠올려 볼까.


      2015년.

      래블업을 창업했다. "랩 을 업" 이자 "lab | up" 을 이용해 중의적 표현으로 지은 이름이다.

      박사 과정 내내 고생을 사서 하던 사람들이, 다른 사람들은 고생을 덜 할 수 있도록 계산과학 분야의 연구 자동화 플랫폼을 만들자는 목표로 모였다. 베어 메탈[3]에 작업 관리자[4] 얹어 어설프게 클러스터를 돌리는 대신 재현성과 이식성이 보장되는 연산 환경이 필요하다고 생각했다. 시작은 용감했으나 연구 플랫폼은 수요가 없었다. 창업 2개월만에 대학도, 연구 기관도, 장비는 쉽게 사지만 소프트웨어엔 돈 쓰는게 인색하다는 것을 배웠다. 학교엔 돈이 없고 시키면 알아서 해오는 대학원생은 많았다. 업계엔 아직 대규모 과학 연산 수요가 없었다. 동시에 우리처럼 학교에만 있다가 밖에 나온 박사들은 사람처럼 말하기 위해 재사회화 과정을 거쳐야 함도 힘들게 배웠다.

      재사회화가 덜 된 우리의 말재간만 문제가 아니었다. 말하는 내용이 문제였다. 기술 기반의 과학 발전 이야기나 연산 기반의 혁신 가속 이야기는 어디를 가도 SF 이야깃거리였다. 지쳐가고 있었다. 그래도 사람은 보는 것만 보인다고 했던가. 딥 러닝 모델의 가능성이 분명 태동하고 있었다. 심지어 딥 러닝 기술과 결과물이 자본에 종속 되는 것을 막자는 여러 움직임이 시작되었다. 그 중 대표적인 기관이 OpenAI[5] 였다. 그러한 변화들은 우리가 맞는 방향을 가고 있다는 증거로 보였다. 일 년만 하면 방향이 조금 더 뚜렷해 질 것 같았다.

      창업 만 일 년을 목전에 둔 시점에 딥 러닝에 대해 사회적으로 큰 관심이 생겼다. 2015년 연말 즈음 TensorFlow[6]가 세상에 나왔다. 플랫폼 프로토타입으로 만든 코딩 플랫폼의 첫 강의 자료로 TensorFlow 메뉴얼을 통째로 번역해서 올렸다. 알파고의 2016년 3월 대국[7]때 처음 서비스가 다운될 정도로 사람들이 몰려왔다. 그 때 그 대국이 아니었다면 아마 이 뒷이야기는 없었을 지도 모른다. 그 덕에 다행히 회사는 살아남았다.

      거대 규모 연산을 수행하는 연구 플랫폼 데모가 필요했다. 연산 자원을 엄청나게 필요로 하며, 박사과정부터 취미로 잡고 있어 바로 다뤄볼 수 있던 주제가 언어 모델이었다. 2016년 우리가 만들던 플랫폼 위에 언어 모델을 올려 만든 챗봇을 발표했다. 많은 사람들의 관심을 끌었다.[8][9] 챗봇은 금방 사내 프로젝트로 자리 잡았다. 하지만 일 년이 조금 넘은 시점에 챗봇 프로젝트는 창고로 들어갔다.

      2017년.

      그 해 가을 래블업은 사이드 프로젝트로 병행하던 언어 모델 개발을 접고 AI 클러스터 운영 플랫폼인 Backend.AI 에만 전념하기로 결정했다.

      구글 초청으로 방문한 폴란드 크라쿠프에서 본 구글 어시스턴트 데모의 충격이 컸다. 열 분 남짓한 분들과 함께한 그 미팅의 주제는 언어 모델이 이제 자원 전쟁의 일부가 되었으며, 대규모 투자 없이는 이후의 변화를 따라갈 수 없음을 너무 확실하게 보여주었다. 구글 개발자 서밋에 함께 참석한 곽동현님과, 같은 시기 같은 장소에서 열린 학회 참석차 크라쿠프에 방문하셨던 이상훈님과 함께 저녁식사를 함께 하며 이야기를 나누었다. "여기서도 물리학 분야에서 봤던 그 미래가 시작될 것 같아요."

      맨해튼 프로젝트는 팔십 여년 전 기술이 힘이 됨을 핵무기를 통해 전인류를 대상으로 강렬하게 어필했다. 물리학은 더이상 낭만의 대상이 아니라 투자의 대상이었다. 그렇게 시작된 생계형 물리학자의 시대는 우주 계획과 입자물리학으로 연결되는 거대 과학 분야로의 변화로 이어졌다. 그 날 밤 숙소로 귀가하며 함께하는 멤버들에게 메세지를 보냈다. "우리 이제 언어 모델 개발은 하지 말죠. 이제부턴 따라가려면 돈이 부족할 겁니다."

      역사는 항상 반복된다. 그렇다면 앞으로 어떤 변화가 있을지 예상하는 것도 어렵지 않다. 단지 시점이 문제일 뿐이다. ‘아마도 변곡점은 2020년일것 같다’는[10] 의견을 동료들과 나누었다. 그 때 즈음이면 흑자가 가능하지 않을까? 회사의 목표가 되었다. 언어 모델은 LSTM 기반의 기계 번역을 넘어 한 걸음 발전하고 있었다. 알파고 쇼크는 사람들이 AI에 대해 지어내는 수많은 농담들의 아이디어가 되었다. 엄청나게 많은 "AI 기업" 들이 생겼다. 하지만 그 대부분은 2년 후 코인회사나 메타버스 회사가 되었다.

      2018년.

      트랜스포머[11]구조는 온갖 언어 모델의 다양한 부분에 적용되기 시작했다. ‘무엇’ 에 집중할지 알려준다는 점에서 트랜스포머는 모델의 컨텍스트 기억과 유지, 강조에 대한 많은 부분을 해결해주었다. 정보를 상태공간에 넣는 인코딩에 쓸 수도, 상태공간에서 정보를 추출하는 디코딩에 쓸 수도 있었다. 구글은 BERT[12]를, OpenAI는 GPT를 내 놓았다. 두 모델 모두 트랜스포머 기반의 언어 모델이었으나, 집중하는 포인트는 각각 인코더와 디코더로 달랐다. BERT은 인코더 부분에 집중하였으나 GPT는 디코더를 통해 출력을 입력으로 연계하는 식으로 인과 관계에 대한 메모리를 만드는 아키텍처를 구현하여, BERT와 구조적인 차이가 있다. BERT와 GPT, 이후 등장하는 T5는 더이상 라벨링된 말뭉치를 쓰지 않았다. 트랜스포머를 이용하여 말뭉치 자체에서 언어의 구조를 학습시킨 후, 이후 미세 조정하는 방식으로 언어모델을 만들 수 있었다. 데이터에 인간의 개입이 없는 AI 모델 개발 철학인 End-to-end 훈련과는 여전히 거리가 있었다. 하지만 데이터 확보에 대한 개념이 그 시점부터 달라졌다. 라벨링보다 양이 중요하다. 범용 언어 모델의 시작이었다.

      BERT는 엄청나게 빠른 속도로 기존에 존재했던 대부분의 언어 모델을 대체할 수 있을 것으로 보였다. 압도적인 성능은 문서 작성, 챗봇, 문서 분석 등의 다양한 언어 작업들에 적용하여 큰 개선을 만드는 것에 대한 기대를 품게 했다. 하지만 BERT는 2018년 당시에는 훈련 과정을 상상할 수 없을 만큼 큰 모델이었다. 구글 밖에서는 아무도 못 만들 것 같은 모델 크기에 벽 구경하는 느낌을 받았다. 그것도 찰나였다. 페이스북이 BERT 논문을 바탕으로 사이즈를 더 키운 RoBERTa를 순식간에 발표했다.[13] TPU가 꼭 필요한 것이 아님을 알림과 동시에, 이 레이스엔 자본이 있는 누구나 참여가 가능함을 알리는 상징적인 행동이었다.

      GPU를 사용해 모델 크기를 키우는 첫 병목은 GPU의 메모리에서 등장했다. 모델은 더이상 GPU 기기 한 장에 담거나, 한 장으로 시간 내에 훈련시킬 수 없었다. 경우에 따라 여러 대의 GPU에 모델을 나눠 담거나 여러 컴퓨팅 노드를 사용해 모델을 분산 훈련하는 것이 일반적이 되었다. Horovod, Distributed TensorFlow들이 빛을 발하기 시작했다.

      기술은 계속 발전하고, 동일 연산 자원에 들어가는 비용은 계속 감소한다. 이런 발전이 지속된다면 결국 AI의 대중화가 진행 될 것이고, 그 시점에서 가장 중요한 포인트는 다른 모든 시장에서도 동일한 가격 경쟁력이 될 것이었다. "AI도 가격 경쟁력 시대가 올 것이다" 써 붙였다. 그 때 까지 망하지 않기를 기원하면서.

      • BERT, 3억 4천만 파라미터
      • GPT, 1억 1천만 파라미터

      2019년.

      몇 년 간 분산 처리 및 분산 훈련 플랫폼을 만들면서 가끔 ‘우리가 아무런 수요가 없는 플랫폼을 만들고 있는 것이 아닐까’ 하는 생각을 종종 했었다. 2019년 이후로는 그런 생각이 들지 않았다. 2020년부터는 그런 생각을 할 시간이 없었다.

      연초가 되자마자 OpenAI는 GPT-2[14]를 발표했다. 위상공간에서 정보를 추출하는 디코딩 과정에 집중한 GPT 모델은 굉장히 안정적인 텍스트 생성 기능을 보여주었다. GPT-2는 누구나 언어모델을 만들어 볼 수 있는 기초 코드가 되었다. PyTorch, horovod와 Distributed TensorFlow 등과 함께 코드 접근의 어려움은 엄청난 속도로 줄어들고 있었다. 2019년 Google의 XLNet과 T5 (Text-To-Text Transfer Transformer) 언어 모델은 인류가 넘을 수 없다고 생각했던 모델 크기의 강을 (자본을 써서) 넘은 것처럼 보였다. 구글은 T5를 훈련하려면 TPU 급의 엄청난 연산 자원이 있어야 함을 강하게 어필하며, 시중에서 노력하면 살 수 있는 NVIDIA의 V100으로는 몇 백장이 필요함을 강조했다. (V100 한 장에 1500만원 정도의 비용이 들었다.) T5 또한 BERT처럼 논문만 공개하고 모델은 공개하지 않았다. 2017년 BERT 공개 때 (훈련이 덜 끝나서) 바로 모델을 함께 공개하지 않았는데 그 틈에 페이스북이 동일한 모델로 규모를 키워 훈련한 RoBERTa를 선제적으로 발표했던 아픈 경험이 있다. 그런데도 공개를 하지 않은 것에 비추어 보면, 구글에겐 구글 밖에서 그 모델 훈련을 재현하기 어려우리라는 자신감이 있었을 것이다.

      2019년 말 우린 오랜 떠돌이 생활을 마치고 단독 사무실을 장만하여 거처를 옮겼다. 거대 딥 러닝 모델의 시대가 올 것이고 그러려면 우리도 그에 대응하여 더 많은 사람들과 함께해야 할 것이었다. 언어 모델의 크기는 해마다 열 배 씩 커지고 있었다. 그렇게 많지도 않은 짐들을 박스에 실어 나르며 스스로에게 반문해보았다. 이대로는 3년이면 모델 크기가 천 배가 커지는 것인데, 우리는 천 배의 워크로드를 감당할 준비가 되어 있을까?

      • RoBERTA, 3억 5천만 파라미터
      • Transfer ELMo, 4억 6천만 파라미터
      • GPT-2, 15억 파라미터
      • T5, 110억 파라미터

      2020년.

      사무실을 이전한지 두 달이 흘렀다. 겨울은 길었다.

      2월이 끝나가도록 이사를 마친 새 사무실의 인테리어를 마무리하지 못했다. 2월 말에 온다던 사무실 벽체 마감재는 중국에서 끝내 건너오지 않았다. 회사의 모든 로드맵이 바뀌었다. 미국 출장은 전부 취소되었다. 인테리어가 덜 끝난 사무실은 그 후 2년동안 덜 끝난 채로 빈 공간을 지켰다.

      COVID-19는 회사의 미래 뿐 아니라 사람들도 갈라놓았다. 첫째 아이는 마루에 비스듬히 기대 누워 EBS 방송 텔레비전에 나오는 호랑이 선생님을 보면서 초등학교 생활을 시작했다. 방바닥에서 굴러다니는 어린이 옆에서 함께 굴러다녔다. 그동안 얼마나 바빴던 걸까? 남매를 키우는데도 코로나로 한 집에 갇히고 나서야 아빠라는 실감을 했다. 슬프면서도 이상하게 안정되는 그 시간이 얼마나 갈 지 궁금했다.

      그 해 OpenAI에서는 GPT-3를 공개했다. GPT-2와 이론적 토대는 크게 달라지지 않았다. 하나 크게 달라진 것이 있었으니, 크기였다. 1750억 파라미터의 크기를 가진 엄청난 규모의 모델이었다. 모델 훈련 뿐 아니라 단순히 GPU 위에 적재하는 것 만으로도 NVIDIA의 슈퍼컴퓨팅 노드인 DGX-2 한 대를 차지할 것으로 예상되었다. GPT-2와 달리 이번에는 언어 모델의 코드도, 훈련이 끝난 언어 모델도 공개하지 않았다. 와우. 딥 러닝 분야에 비공개라니. 무엇인가가 달라지고 있었다.

      모델 크기 지상주의에 반발하는 움직임이 있었다. 딥 러닝 모델의 크기가 커질수록 성능이 따라서 커지는가? 구글의 연구진들과 메타의 연구진들 간의 논쟁이 시작되었다. 한 쪽에서는 그렇다, 다른 한 쪽에서는 아니다 로 나뉘어 논문의 형식을 빌린 말싸움이 벌어졌다. 그러나 2019년부터 2021년까지 이어진 이 논쟁은 오래가지 못했다. 언어 모델 크기를 키우면서 재미있는 현상들이 발견되었다. 딥 러닝 모델에는 스케일 법칙이 존재했다.[15] 1000억 파라미터를 전후하여 무엇인가가 일어났다. 모델의 구조와는 상관없이, 1천억 파라미터를 넘기는 어떤 시점부터 언어 모델은 말을 이어 지어내는 것을 넘어 기대하지 않았던 일을 하기 시작했다. 충분히 큰 모델들은 컨텍스트를 유지한채로 복잡한 일들을 처리할 수 있었다. 컨텍스트 내 학습 (in-context learning)이라고 부르는 현상은 모델 훈련 없이도 여러 지식을 즉석에서 학습하고, 논리적인 결론을 유도할 수 있었다. 거대 언어 모델 (Large Language Model) 과 이를 둘러싼 레이스의 시작이었다.

      언어 모델이 크기 문제를 둘러싼 논쟁과 발견에 동시에 빠져 있는 동안, 의학 응용 분야의 딥 러닝 도입은 엄청난 속도로 시작되었다. 딥 마인드의 알파폴드2는 몬테카를로 시뮬레이션 없이 예측만으로 구조 예측을 높은 정확도로 해 냈다. 프로테오믹스 분야의 주요 난제였던 필요 계산 량을 거의 천분의 일 수준으로 줄였다. 코로나 바이러스의 변이 예측, 합성물질 중 백신 후보 물질 필터링, 새로운 합성 구조 예측 등의 미시적인 단계부터 전파 경로 예측과 감염자수 예상까지 AI 모델의 응용은 다양한 분야로 확장되었다. 모두가 이전 같으면 두들겨볼 돌다리들을 일단 밟고 건너기 시작했다. 자원 규모의 눈덩이는 엄청난 속도로 굴러갔다.

      하반기가 되자 모델 훈련 속도를 올리기 위한 연산 자원 규모의 이야기가 오갔다. 연구 목표 달성을 위한 기존의 딥 러닝 연산 자원 확보 경쟁과는 달랐다. 규모는 운영과 최적화 수요를 낳았고, 그 덕에 우리는 2017년 예상했던 ‘2020년부터 흑자 달성’ 을 이룰 수 있었다. 플랫폼 수요가 늘었지만 동시에 강제로 재택 근무에 들어가야 했고, 대부분의 의사소통은 문자가 되었다. 이후 많은 사람들이 함께 하게 되었지만 그 중 몇몇은 2023년 초 워크샵 때 까지 서로 한 번도 만난 적이 없는 동료가 될 운명이었다.

      연산 자원 규모가 커지고 있었고 모두 GPU에 주목했지만, 모델이 커지고 GPU 대수가 늘어나자 GPU가 발목을 잡는 부분이 적어졌다. 가장 발목을 잡는 부분은 데이터 저장소, 스토리지였다. 훈련시에는 몇 백대의 기기에 데이터를 공급해야 한다. 스토리지의 절대 속도가 GPU 개수의 증가를 충분히 따라잡지 못했다. 2020년 우리가 풀어야 했던 문제의 대부분은 스토리지에서 발생하는 병목에서 나왔다.

      딥 러닝 분야의 속도전보다는 느릿했지만 더 깊은 다른 종류의 변화가 찾아왔다. 온라인에서만 만들어진 인간관계를 보통 인간관계와 같게 받아들이는 것이 세대를 불문하고 모든 사람들에게 자연스럽게 되었다. 그러다 보면 문득 생각이 드는 순간이 찾아온다. ‘반대쪽에 있는 것이 사람이든 아니든, 말만 잘하면 나에게 큰 차이가 있는 존재인가?’

      • T-NLG, 170억 파라미터
      • GPT-3, 1750억 파라미터
      • Gshard, 6000억 파라미터

      2021년.

      T5에 이어 GPT-3가 불러온 거대 언어 모델 개발의 레이스는 점입가경이었다. 크기가 커져도 성능향상이 계속되는지 알아보려면 더 크게 만들어 보는게 가장 간단하기 때문이다. 거대 언어 모델이 왜 특이한 결과를 만들어내는가에 대한 다양한 이론들이 등장했지만 여전히 답은 오리무중이었다. 상태 공간이 충분히 크면 정보를 다루는 과정에 일종의 상전이가 생긴다는 가설이 등장했다. 트랜스포머가 어째서 이러한 작업을 잘 처리하는가에 대한 답의 후보로는, 트랜스포머 구조가 그래프 신경망 (Graph Neural Network)의 특수해이기 때문이라는 설명이 있었다.[16] 2018년부터 주목받은 그래프 신경망은 대상의 관계를 학습하는 신경망이고, 그래프 신경망이 시맨틱스나 텍소노미 처리에 매우 강력할 수 있음이 알려져 있다.

      분산 모델 훈련을 위해 속도를 희생하는 대신 더 큰 모델을 훈련할 수 있게 하는 마이크로소프트의 DeepSpeed 프레임워크가[17] 점점 널리 쓰이기 시작했다. DeepSpeed의 특징인 ZeRo 최적화기는 CPU부터 GPU까지 다양한 하드웨어에 워크로드를 분배하고, 모델 상태를 분할 처리함으로써 이를 통해 GPU의 메모리 사용량을 줄이는 과정에 집중했다. 오픈소스 언어 모델들도 여럿 등장했다. OpenAI는 더이상 모델을 공개하지 않고, 모델 사용의 독점권을 팔고 있었다. 접근성이 낮아져 다양한 언어 모델들이 등장했지만, 규모의 면에서 거대 언어 모델에 미치지 못했기에 높은 기대치를 만족시킬 수 없었다.

      사용자들이 다루는 GPU의 규모가 쉽게 세 자릿수를 넘기 시작했다. 기관에서 실제로 돌리는 워크로드에 맞는 거대 규모의 테스트가 다양하게 필요해졌다. 2017년 말 취미의 영역으로 보냈던 언어 모델을 시스템 테스트 용도로 다시 돌려보기 시작했다. 플랫폼 위에서 전세계에서 가장 큰 포르투갈어 언어 모델이 태어났고, NVIDIA GTC 컨퍼런스의 키노트에서 잠시 지나가며 소개되었다. 같은 컨퍼런스에서 "BERT를 60초만에 파인튜닝하기"라는 튜토리얼 세션이 열렸다. BERT는 더이상 거대 모델이 아닌 연습 대상이었다.

      모델 크기가 급속도로 커지면서 풀어야 하는 문제도 바뀌었다. 여러 대의 GPU들에 모델을 나눠 적재해야 하는 상황이 되자 GPU간의 통신이 엄청나게 중요해졌다. GPU들은 한 노드 안에서 메모리 접근을 공유하는 것을 넘어 여러 노드에 걸쳐 통신하는 경우가 늘어났다. 초당 200Gb를 전송하는 인피니밴드를 GPU마다 하나씩 붙인 GPU 네트워크가 당연하게 쓰이기 시작했다.

      복잡하고 정신 없는 변화속에 살며 생각거리가 하나 생겼다. 거대 언어 모델이 ‘언어’ 를 배우는 과정은 분류되지 않은 말뭉치를 대상으로 한다. 그 과정에서 거대 언어 모델이 ‘학습’ 하는 것은 무엇인가? 언어의 구조를 학습하기 위한 용도로 말뭉치를 쓰지만, 언어는 정보와 떼 놓을 수가 없다. 실제로 지식을 가르치지 않은 언어 모델들도 질문에 곧잘 대답하지 않는가? 애초에 언어는 인간이 정보를 서로 간에 전달하기 위한 프로토콜이다. 프로토콜로 전달된 데이터에 대한 답을 연산하여 다시 데이터로 답을 하는 것이 대화 과정이다. 그렇다면 우리가 ‘대화를 잘하는 AI’를 개발해 냈다고 느끼는 것은 정말 언어를 잘 만드는 AI 모델을 개발한 것일까, 그렇지 않으면 그 너머의 무언가를 만든 것인가?

      내년은 기존의 서비스들을 AI로 개선한 서비스들이 아닌, AI로만 가능한 서비스들의 원년이 될 것이었다. 하지만 거대 언어 모델의 결과물들을 서비스하려는 생각은 아직 아무도 하지 않고 있었다. 그건 미래의 누군가가 할 일이었다.

      • GPT-J, 60억 파라미터
      • LaMDA, 1600억 파라미터
      • PanGU-alpha, 2000억 파라미터
      • Gopher, 2800억 파라미터
      • Pathways, 5300억 파라미터
      • Switch-C, 1.6조 파라미터
      • Wudao 2, 1.75조 파라미터

      2022년.

      COVID-19 엔데믹은 엄청난 후폭풍을 만들어내고 있었다. 코로나로 인한 특수로 성장한 수많은 IT기업들과, 오프라인을 온라인으로 전사하려고 노력하던 수많은 회사들은 갑자기 신기루처럼 사라진 메타버스 수요에 망연자실했다. 딥 러닝 분야는 별다른 수익원을 만들어내지 못하고 있었다. 수없이 많은 회사에서 AI 팀의 크기를 줄이기 시작했다. 많은 연구자들이 밖으로 나왔다.

      AI에 대한 기술적 발전이 필요가 없어진 것은 아니었다. AI 개발의 저변에 깔린 거대한 규모의 영향력이 다른 모든 발전을 압도했기 때문이었다. 거대 과학의 시대에는 장비가 가장 비쌌듯 말이다. 혁신이 규모에서 나오기 시작한지 3년이 흐른 결과였다. 거대 언어 모델에서 발생하는 특이점이 창발 현상의 일종으로 간주되기 시작했다.[18] 소규모의 연구들은 더이상 매력적이지 않았다. 딥 러닝 분야의 연구자들은 불안해했다. 줄어든 관심이 문제가 아니었다. GPU 달랑 몇 대로 어떤 연구를 할 수 있을지에 대한 가벼운 절망감 한 스푼이 더 문제였으리라.

      그럼에도 불구하고 연초부터 등장한 여러 혁신들이 있었다. 잘 정의된 데이터로 훈련하는 것에 더해서, 답변들을 사람이 실제로 평가하여 더 나은 답변에 가중치를 주는 모델 튜닝 방식이다. 사람을 중간에 넣는 방식으로 강화학습을 언어 모델 훈련에 적용한 RLHF (Reinforcement Learning by Human Feedback) 방식은 2022년에 InstructGPT에 와서 같은 크기의 언어 모델 성능을 엄청나게 개선하는 결과를 보였다. 수많은 모델들이 RLHF를 적용하기 시작했다. 모델 크기에 스케일 법칙이 있다면 그걸 응용하지 못할 이유가 없을 것이었다. 3월에는 모델 훈련에 들어가는 비용을 엄청나게 줄일 수 있는 µ-Parametrization[19]이 발표되었다. 작은 모델에서 미리 큰 모델의 하이퍼파라미터를 예측하는 것이 가능하다는 연구의 결론은, 거대 모델을 만들 때 드는 파라미터 탐색 수고를 상대적으로 엄청나게 줄였다. 이 연구는 GPT-4 훈련의 기반이 되었다.

      미국-중국 무역 갈등의 여파로 미국은 중국을 대상으로 한 엔비디아의 AI 훈련용 GPU 수출을 금지시켰다. 며칠 지나지 않아 중국은 자체 반도체만으로 훈련했다는 거대 언어 모델을 공개했다.[20] 얼마 후 엔비디아는 GPU 네트워킹 기능을 제거한 같은 GPU를 이름만 살짝 바꾸어 수출을 재시작 했다. DALL-E2와 Stable Diffusion 모델로 인해 AI 서비스 분야로의 관심사는 갈수록 커졌고, 이미지 등의 생성 AI 모델 시장은 격변하기 시작했다.

      11월 말 OpenAI는 대중을 대상으로 챗봇 서비스를 열었다. GPT-3의 개선 버전인 GPT-3.5를 기반으로 한 모델이었다. 특이한 점은 인간 언어 모델에 프로그래밍 코드를 훈련시키는 방식으로 프로그래밍을 잘 하는 언어 모델을 만드는 대신, 프로그래밍 언어 데이터로 훈련된 모델에 인간 언어를 훈련시키는 방식으로 만들어진 모델이라는 점이었다. 거대 언어 모델의 논리 구조 훈련에 프로그래밍 코드 훈련이 어떤 식으로 영향을 주는 것이 분명해 보였다. 12월 초, ChatGPT로 이름 붙여진 서비스는[21] 대중 모두에게 열려 있는 엄청난 접근성을 바탕으로 거대 언어 모델에 대한 관심을 불러일으켰다.

      연말이 되자 직장을 잃을 것 같던 AI 분야의 지인들이 실시간으로 갑자기 좋아지는 지원에 당황해 했다. 엔데믹의 감원 열풍을 타고 AI 조직 사이즈를 줄여 나가던 회사들의 움직임이 멎었다. 한 주 전까지 연구 조직 축소와 결과물 평가를 압박하던 수장들이 AI를 외쳤다. 모델 서비스 프레임웍에 필요한 요구조건들이 갑자기 바뀌기 시작했다. 거대 언어 모델들의 목표가 상용화가 되었다. 모델 크기가 너무 커서 더이상 훈련과 서비스용 연산 자원을 구분하는 의미가 없어졌다. 원래 서로 다른 영역에 있던 AI 모델 훈련과 서비스가 갑자기 하나로 합쳐졌다.

      더 큰 규모의 문제들이 기다리고 있다. 거대 언어 모델은 엄청난 전력을 소모한다. GPU는 어마어마한 전력을 소모한다. CPU에 비하면 전력 대 성능비가 엄청나게 좋은 기기이지만, 절대 전력 소모량이 너무 크다. NVIDIA A100 8대가 내장된 노드[22]는 약 7kW를, 2023년 기준 가장 성능이 높은 H100 GPU 8대가 내장된 노드는 약 12kW를 소모한다.[23] 기기를 설치하려면 이제 건물부터 지어야 한다는 말이 2019년 이후로 농담이 아니게 되었다. 2021년 브라질에 위치한 슈퍼컴퓨팅 클러스터에서 전력 문제를 겪은 후, 우리는 플랫폼을 통째로 Arm기반으로 이식했다. 몇 년 후 전력 문제가 이슈가 될 것이란 생각에서 였다. 마이크로소프트의 경우 전력 비용을 고려하여 아예 GPU 센터를 수력발전소 옆에 지은 경험을 공유하기도 했다.[24]

      주말이 줄어들었다. 할 일이 너무 많아졌다. 시간이 없었다. 우리만 그런 것이 아니었다.

      이제 모두에게 시간이 없었다.

      • Flan-T5, 1100억 파라미터
      • GLM-130B, 1300억 파라미터
      • OPT-175B, 1750억 파라미터
      • BLOOM, 1760억 파라미터
      • PaLM, 5400억 파라미터

      2023년.

      2월 8일, 17시간 간격으로 마이크로소프트와 구글이 각각 거대 언어 모델 기반의 서비스에 대한 발표를 진행했다. 마이크로소프트는 자사의 검색엔진인 Bing에도, 오피스 스위트에도, 윈도우 11에도 전부 GPT 모델을 도입하겠다는 계획을 발표했다. 구글은 LaMDA 기반의 Bard를 발표했다. 바이두는 어니봇을 공개했다. 두 회사는 만져지는 서비스 대신 미래를 먼저 홍보했다, 써 볼 수 없는 도구는 상대적으로 흥미를 끌지 못했다.

      언젠가 올 것이라고 생각했던 "AI 가격 경쟁력 시대"가 왔다. 그런데 가격 자체의 허들이 너무 높았다. ChatGPT나 Bard는 경제논리로는 설명할 수 없을 정도로 고가의 서비스 비용을 소모한다.[25] 경쟁이 불러온 너무 빨리 당겨온 미래에 해당된다. 모든 사람들이 그 미래를 손으로 만져본 후였다. 기대치가 엄청나게 올라간 것이 문제였다.

      갑자기 다가온 거대 언어 모델 서비스는 또 다른 병목을 만들고 있다. CPU 기반으로 인퍼런스하는 서비스는 CPU 코어당 램 대역폭이 크게 줄어든 여파를 받았다. 하나의 CPU에 올라가는 코어 개수가 급격하게 늘어났기 때문이다. GPU 기반으로 인퍼런스하는 서비스는 모델이 담기는 GPU 메모리의 용량과 속도가 모두 부족해졌다. 언젠가 올 것이라 여겨졌던 램의 병목이 거대 언어 모델 서비스의 상용화로 갑작스럽게 직접적인 문제가 되었다. 2021년부터 예상된 병목이었다. 인텔, AMD, 엔비디아 등의 CPU, GPU 개발사들은 이 상황을 미리 준비했다. 인텔의 Xeon Max, AMD의 MI200과 NVIDIA GraceHopper 등, 2022년말부터 2023년 초에 걸쳐 다양한 하드웨어를 발표했다.

      AI 모델이 엄청 크면 연산 능력이 상대적으로 덜 중요해진다. NVIDIA A100은 첫 발표 때 40GB 모델을 공개했지만, 1년이 되는 시점에 80GB 메모리 모델을 다시 발표했다. 훈련 과정이든 인퍼런스 과정이든, 모델을 메모리에 올렸다 내렸다 하기엔 크기가 너무 컸다. 또한 거대 언어 모델을 "인퍼런스" 하는 과정은 GPU나 NPU에 대한 사고의 역전을 불러왔다. 끊임없이 가중치 행렬을 갱신해야 하는 훈련 과정과 달리, 인퍼런스 과정은 메모리에 올린 고정된 모델 구조를 따라 입력 데이터를 흘려 결과를 보는 식으로 동작한다. 따라서 연산의 비중이 엄청나게 줄어들고 메모리의 속도가 엄청나게 중요해지고 있다. NVIDIA는 2022년 하반기 80GB의 메모리 용량으로 H100을 발표했다. 그러나 반 년도 지나지 않아 실제 H100을 수령한 사람도 거의 없는 시점에 188GB 용량의 H100 NVL을 내놓았다.[26]

      메타는 개인용 서버에서도 무리하면 돌려볼 수 있는 언어 모델인 LLaMA[27]를 내놓았다. LLaMA는 온갖 라이선스 제약이 붙어있음에도 불법 유출본으로 퍼졌고, 스탠포드에서 파인 튜닝한 Alpaca-LLaMA는 (상대적으로) 작은 모델로도 상당한 성능을 발휘할 수 있는 가능성을 보였다. 이후 라이선스 문제 없는 다양한 언어 모델들이 계속 공개되며[28] 오픈 언어 모델들의 가능성의 불을 지피고 있는 동시에 어느 정도 파라미터 크기의 모델이면 만족할 수 있는가에 대한 새로운 물음을 불러 일으켰다. 모델이 작으면 창발 현상이 발견되지 않고 멀티 모달 모델로 쓸 수가 없다. 모델이 크면 실제 운영에 너무 큰 돈이 든다.

      거대 언어 모델은 어디까지 커질 수 있을까. 더 큰 모델에 대한 준비의 흔적은 사방에서 보인다. 분산 모델 훈련에서 가장 자주 쓰이는 마이크로소프트의 DeepSpeed 프레임워크는 2021년 NVMe SSD를 활용하여 1조~10조 파라미터를 훈련할 수 있는 확장인 ZeRO Infinity[29]를 추가했다. 그러나 이렇게 많은 파라미터를 가진 모델들은 실제 서비스가 불가능하다. 실질적으로는 서비스 가능한 모델 크기의 한계를 정해 두고 그 안에서 파인 튜닝하는 방식의 접근이 진행된다. ZeRO 등의 기술은 초거대 스케일의 모델을 훈련하기 위해 개발되었지만, 매우 적은 자원으로 파인 튜닝을 할 수 있게 하므로 다양하게 응용되고 있다.

      • PaLM-e, 5600억 파라미터
      • Pythia, 12억 파라미터
      • LLaMA, 65억 파라미터

      그 외 수많은 ~ 120억 파라미터의 모델들


      20억~120억 파라미터 정도의 다양한 ‘말을 잘하는’ 모델들에 대한 다양한 시도들이 하루에 몇 개씩 등장하고 있다. LLaMA는 의도치 않게 개인이 만져볼 수 있는 파운데이션 모델을 널리 퍼뜨렸다. 보통 사람들이 만족할 만한 대화를 만들어내는 "말 잘하는 모델"의 수준은 예전에 달성했음을 수많은 사람들이 깨닫게 되었다. 어느정도 컴퓨터에 지식이 있고 돈을 쓸 수 있는 개인이나 조직, 단체들이 언어 모델 파인 튜닝을 다양한 방법으로 시도할 수 있는 용기가 생겼다.

      동시에 말을 잘하는 정도를 넘어선 모델들의 연산 자원 요구량은 차원이 다르게 크다는 것도 함께 알려지는 중이다. 약 반 년 가까이 새로 등장하는 거대 언어 모델의 크기는 6000억 파라미터 미만으로 유지되고 있다. 더 이상의 크기 확장에 천착할 만큼의 결과가 등장 하지 않는 것일 수도 있고, 현재의 하드웨어 및 비용이 만들어낸 기술 장벽이 가로막고 있을 수도 있다. 또는 그 크기가 상용화가 불가능한 영역에 걸쳐 있기에 이제 적절한 크기 이하로 유지하려는 움직임일수도 있다.

      2015년 GPU 4대를 운영하는 오픈소스로 시작한 Backend.AI는 2023년엔 몇 천 대 규모의 GPU를 다루며 곧 만 대를 바라본다. 우리를 포함한 모든 환경이 엄청나게 변했다. 문제들을 캐면 캘수록 마치 감자 줄기처럼 끝없이 다음 문제가 이어 나온다. 거대 언어 모델의 크기에 얽혀 수많은 문제들을 풀며 살아가다가, 이 문제의 끝은 어디에 다다를까 가끔 생각한다.

      생각이 많은 밤이면, 모르는 사이에 관심에서 멀어져버린 튜링 테스트 마냥 우리 모두가 어떤 지점을 지나버렸을지도 모른다는 생각이 종종 든다. 풀어야 했던 문제를 풀었거나, 아직 풀면 안되는 문제를 풀어버렸을 것 같다. 설렘이 현기증이 되고 기대가 우울함이 되는 복잡한 감정이 오간다.


      • [1] 페이스북 글
      • [2] 뉴런 사이의 연결 뿐 아니라 다양한 파라미터들이 있으나 모델 크기가 크면 상대적으로 작으므로 편의상 엄청나게 단순화하였다.
      • [3] 가상 머신 등이 아닌 날 것 그대로의 물리적 컴퓨터. 클라우드에서는 관리 소요 감소 및 유연한 자원 관리를 위해 베어 메탈에 하이퍼바이저를 올려 가상 머신을 운영하거나, 컨테이너 기반으로 관리하는 것이 일반적이다. 비용 문제로 인하여 소규모 연구소 및 대학 등에는 아직 대중화되지 않았다.
      • [4] Job Scheduler. 프로세스들을 실행하고 관리하는 과정을 돕는 소프트웨어. Slurm 등이 보편적으로 쓰인다.
      • [5] https://www.openai.com (2015). 2020년 이후 OpenAI는 구현체를 공개하지 않았으며, 2023년 이후에는 논문 대신 테크 리포트 정도만 제공하고 있다. OpenAI가 아직 Openness를 추구하는 AI 개발 조직인지에 대해서는 2023년 현재 여러 의견이 있다.
      • [6] https://www.tensorflow.org, Google (2015)
      • [7] "AlphaGo - The Movie" 당시 분위기를 느끼지 못한 분들은 다큐멘터리를 참고 (2018)
      • [8] J.Shin "Creating AI chat bot with Python 3 and Tensorflow" PyCon APAC 2016 (Korean) / (English) (2016) 여러 나라에서 소개할 기회가 있어 동일 주제로 다양한 발표 영상이 있으나 이 두가지가 최초의 발표이다.
      • [9] J.Shin "전자양의 꿈을 꾸는 안드로이드: Python과 NLTK, TensorFlow를 이용한 챗봇 감정모형 구현" PyCon KR 2017 (2017)
      • [10] 구글 스타트업 캠퍼스에서 인터뷰한 기록이 유튜브에 남았다.
      • [11] "Transformer (machine learning model)"
      • [12] J. Devlin et al., "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding" Arxiv:1810.04805 (2018)
      • [13] Y. Liu et al., "RoBERTa: A Robustly Optimized BERT Pretraining Approach" Arxiv:1907.11692 (2019)
      • [14] A. Radford et al., "Language Models are Unsupervised Multitask Learners", (2019)
      • [15] J. Kaplan et al., "Scaling laws for neural language mod- els" Arxiv:2001.08361 (2020)
      • [16] C K. Joshi, "Transformers are Graph Neural Networks", The Gradient (2020)
      • [17] Microsoft, "DeepSpeed: Extreme Speed and Scale for DL Training and Inference", (2019)
      • [18] J. Wei et al., "Emergent abilities of large language models" Arxiv:2206.07682 (2022)
      • [19] E.Hu, G. Yang, J.Gao, "Tensor Programs V: Tuning Large Neural Networks via Zero-Shot Hyperparameter Transfer" Arxiv:203.03466 (2022)
      • [20] A Zeng et al., "GLM-130B: An Open Bilingual Pre-trained Model" Arxiv:2210.02414 (2022)
      • [21] OpenAI, "Introducing ChatGPT" (2023)
      • [22] 랙 이라는 데이터센터용 가구에 설치하는 컴퓨터 한 대를 노드 하나로 간주하면 된다. A100 GPU 8대가 설치된 노드 하나는 보통 랙 안에서 6칸에서 8칸을 차지하며, 랙 하나에는 40칸 내외의 노드를 설치할 수 있다.
      • [23] 일반적인 대학 건물의 한 개 층 전력이 100kW 내외이다.
      • [24] "NVIDIA Teams With Microsoft to Build Massive Cloud AI Computer" (2022)
      • [25] 개인적인 추산에 따르면 ChatGPT의 경우 GPT-3.5기준 원가는 월 42달러 이상이다. 계산 과정은 링크 참조. 페이스북 글
      • [26] "NVIDIA H100 NVL for High-End AI Inference Launched" (2023)
      • [27] H Touvron et al., "LLaMA: Open and Efficient Foundation Language Models" Arxiv:2302.13971 (2023)
      • [28] 대표적으로는 ElutherAI의 Pythia-12B 모델에 자체 데이터를 결합한 Dolly 2 (2023) 등이 있다.
      • [29] S. Rajbhandari et al, "ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning", Arxiv:2104.07857 (2021) 1조 파라미터 모델을 훈련을 위해 메모리 오프로드 없이 GPU에 올리려면 NVIDIA A100 GPU (80기가) 모델 기준으로 320장이 필요하다.

      25 March 2024

도움이 필요하신가요?

내용을 작성해 주시면 곧 연락 드리겠습니다.

문의하기

본사 및 HPC 연구소

서울특별시 강남구 선릉로 577 CR타워 8층

© Lablup Inc. All rights reserved.