Upgrade to Pro — share decks privately, control downloads, hide ads and more …

하드웨어와 소프트웨어 사이 어딘가에서 AI를 외치다 - 김준기

Lablup Inc.
November 28, 2023
48

하드웨어와 소프트웨어 사이 어딘가에서 AI를 외치다 - 김준기

Lablup Conf 2023

Lablup Inc.

November 28, 2023
Tweet

Transcript

  1. 목차 § AI : 지능의 확장과 기술적 특이점 § 클라우드

    컴퓨팅과 HPC의 융합 § 하드웨어 가속 기술 § 소프트웨어 디자인 § 궁극의 AI 시스템 을 향하여
  2. AI : 지능의 확장과 기술적 특이점 § 과학 연구와 기술

    발전에서 점점 어려워지는 부분 객관성과 재현가능성 남이 확인한 결과를 나도 확인해볼 수 있는 것 필요로 하는 자원의 양 증가 자본 집약적 알고 있어야 하는 배경 지식과 대상의 증가 높은 복잡성 § Make AI Accessible 초기 분야에서 나타나는 다양한 비효율을 선제적으로 제거 및 최적화 유관 분야 지식과 기술 체계의 수직적 통합 머신러닝 분야의 워크로드 특징 이해 대규모 하드웨어 구축의 어려움 이해 소프트웨어 개발·유지보수 과정의 고유 특성 이해
  3. 기술 스택 균형 잡기 단단한 시스템 설계 클라우드 컴퓨팅 HPC

    가속 컴퓨팅 AI 워크로드 이해 하드웨어 소프트웨어
  4. 가상화와 컨테이너 § 가상화 : consolidation의 핵심 전산학 물리적 자원과

    논리적 자원의 분리 § 컨테이너 출발은 Linux cgroup을 통한 운영체제의 namespace 분리 및 자원 제약 구현 하드웨어 성능을 그대로 활용하면서, 일반 user process보다 높은 수준의 격리 가능 Docker가 overlay filesystem 개념을 도입하여 재현가능한 소프트웨어 배포 환경으로 부상 § 기술적 도전 Interactive workload Batch workload Mixed workload Homogeneous CPU·RAM·Local disk Heterogeneous GPU·NPU·RDMA·Network storage
  5. 가상화와 컨테이너 § 현실에서 부딪히는 어려움 cgroup 및 affinity mask를

    고려하지 않고 모든 하드웨어 자원을 땡겨가려 시도하는 소프트웨어들 대부분의 최종 사용자들은 컨테이너를 VM처럼 생각 왜 sudo가 안 되나요? 이용 종료 후에도 가상 디스크 에 자신의 변경사항이 그대로 보존된다고 생각 컨테이너를 VM처럼 실행하는 것은 가능하지만 예: lxd , 연산자원 유연화를 달성하려면 가속기 자원의 동적 할당을 위해 언제든 휘발·재개 가능한 상태여야 함 VM보다는 프로세스에 가깝다!
  6. HPC 고성능 컴퓨팅 § 거대한 규모의 계산을 실행하기 위해 작은

    컴퓨터들을 여러 개 모아서 병렬·분산 처리 § 이 분야에서 잘 하던 것 : 이종교배 하나의 연산 노드에 다양한 형태의 가속 프로세서 장착 고집적·고밀도 고려한 하드웨어 레이아웃 기반 스케줄링 최고의 성능을 위해서라면 x86 뿐만 아니라 다양한 CPU 아키텍처 활용 벡터 명령어 등 § 최근의 변화 개별 노드의 성능 극대화 발열과 전력 문제 수냉! 컨테이너 기반 스택 확산 § 기술적 도전 네트워크 병목을 어떻게 줄일 것인가? 불특정 다수 사용자 multi tenancy 지원
  7. 그래픽 처리 장치에서 범용 가속 프로세서까지 § Shader와 그래픽 가속

    처음에는 각 픽셀에 추가 적용할 연산을 정의하는 계산 함수에서 출발 점차 범용 프로그램을 실행할 수 있는 형태로 발전 GPGPU 처음에는 영상·게임 분야에서 썼지만 과학연산, 머신러닝 등에도 활용 원리 상호의존도가 낮은 정보들을 대규모로 병렬 처리 GPU의 클럭 속도는 낮지만 높은 병렬성으로 고성능 달성 § 새로운 복잡성 운영체제의 CPU 스케줄링을 GPU 스케줄링에 그대로 적용할 수 없음 GPU가 컴퓨터의 중심이 되면서 점점 고도화된 스케줄링 요구 증대
  8. 성능 병목 지점의 변화 § 현재까지 대략의 역사적 흐름 프로세서

    I/O 네트워크 메모리 § 머신러닝의 등장으로 인한 변화 FP16, FP8, INT8, BF16 등 정밀도를 희생하고 계산속도를 올린 수치 형식 보급 추론에는 생각보다 높은 정밀도의 계산이 필요하지 않더라! § LLM의 특징 거대한 단일 벡터로 인해 메모리 대역폭의 중요성이 커짐 HBM 기술의 부상 § 점점 복잡해지는 하드웨어 가속 기술 RDMA / GPU Direct Storage 연산 작업 스케줄러가 이런 구성을 인식·반영해야 최적 성능 달성
  9. 소프트웨어 : 집합적 지식 공동체 § 소프트웨어의 구성 요소? 디자인

    문서, 위키, 이슈 트래커 작성된 코드와 그 변경 이력 개발도구와 사용한 의존성들 § 보통 간과하는 것 개발팀 구성원들의 머릿속에 들어있는 무형의 지식과 공유 경험 오랜 시간의 협업 과정을 통해 눈에 보이지 않게 성장·확장 내가 갑자기 큰 프로젝트에서 새로운 기여를 하기 어려운 이유 문서화가 도움은 되지만 문화 라는 배경 맥락을 더해야 함 도구, 코드, 의존성 등 눈에 보이는 실체는 다 바뀔 수 있으나 집합적 지식은 개발팀의 핵심 경쟁력이자 핵심 자산
  10. 수명이 충분히 긴 소프트웨어의 개발과 유지보수 § 5년, 10년 전에

    작성한 코드를 지금도 유지보수해야 한다면? 그리고, 지금 작성하는 코드를 10년 후에도 유지보수해야 한다면? § 해결책 갈아끼울 수 있는 추상화 : SOLID 원칙 공통 요소의 인터페이스에 대한 regression test 집합적 지식 공동체의 유지보수와 확장 문서화 α 내부 세미나, 미팅, 코드리뷰, ... § 점점 어려워지는 것 가설 검증에 필요한 배경 지식과 셋업 과정의 복잡도 증가 의존성 관리 업그레이드 가능한 추상화 유지 새로운 엔지니어의 온보딩 credit: Software Engineering at Google https://abseil.io/resources/swe book/html/ch01.html#time and change Backend.AI
  11. 수명이 충분히 긴 소프트웨어의 개발과 유지보수 § 의존성 지옥 2015년

    발을 딛고 있는 땅이 바뀔 수 있다는 것을 상수로 받아들여야 함 asyncpgsa aiopg.sa SQLAlchemy / aioredis redis py ? CUDA 8.0 ... CUDA 12.1 / TensorFlow PyTorch transformers isort Flake8 Ruff Polymer Lit React § 자체 라이브러리 개발 2017년 aiotools: asyncio 관련 유티릴티, multi process event loop 구조 지원, TaskGroup, VirtualClock 등 Callosum: serialization 계층을 교체할 수 있는 async native RPC 추상화 라이브러리 etcetra, etcd client py: 불안정한 Python용 gRPC 라이브러리 보완한 etcd 클라이언트 어댑터 raftify: Raft consensus 알고리즘 구현하여 Backend.AI Manager의 HA 구성 § 부분적 모노리포 도입 2022년 10여 개 이상의 별도 패키지들에 대한 엔터프라이즈용 버전 호환성 테이블 관리 🤯 Pantsbuild: 내부 의존성 관리 및 CI 병렬화 도구 변경된 모듈에 의존하는 모듈에 대해서만 lint test 수행
  12. Backend.AI § 하드웨어 소프트웨어의 복잡성 추상화 목표 : 사용자는 시스템

    관리, 시스템 프로그래밍을 몰라도 된다! 계층화된 사용자·프로젝트를 바탕으로 한 정책 기반 자원·비용 관리 양쪽 장점을 모두 취하기 위해 자체 Sokovan 오케스트레이터 개발 § 업계 최고 수준의 성능 제공 갑자기 성능을 10배로 뻥튀기하지는 않지만, 가지고 있는 하드웨어를 최대 한계까지 활용 § 오픈소스 개발 모델 AI를 개발하고 서비스하는 모두가 우리껄 쓰게 만든다! 기여자를 위한 친절함 개선 은 아직 과제로 남아있음 의존성 문제 : 외부 오픈소스 기여 자체 라이브러리 개발 § 개밥먹기 우리도 비싼 서버 사서 이걸로 잘 돌려보자!
  13. Backend.AI § 신정규 PyCon KR 2019 발표 중에서... App Proxy

    GPU/NPU Acceleration GPU GPU network Build tools / public image repository nvidia docker v1/v2 AI Framework Follow ups Data parallel Pipeline I/O Co existing in container Python adapter Container independent Job subsystem GraphQL based API Offline installer Large scale deployment system User GUI/ CLI/App High Availability CUDA driver layer abstraction Programmable syscall filter Control Panel Dashboard Metric API 통곡의 벽...