$30 off During Our Annual Pro Sale. View Details »

[KNU Lecture] Backend.AI 소개 및 설치 튜토리얼

Joongi Kim
September 23, 2019

[KNU Lecture] Backend.AI 소개 및 설치 튜토리얼

- Backend.AI의 "제품으로서의" 소개
- Backend.AI 개발 역사
- 직접 싱글 인스턴스 (개발) 모드로 설치해보기
- Backend.AI 코드 구조 톺아보기
- Backend.AI와 다른 오픈소스 프로젝트 기여 요령

Joongi Kim

September 23, 2019
Tweet

More Decks by Joongi Kim

Other Decks in Programming

Transcript

  1. Backend.AI:
    컨테이너 기반 GPU 관리 플랫폼
    경북대학교 오픈소스 특강
    김준기
    CTO
    Lablup Inc. 2019년 9월 23일
    1 / 46

    View Slide

  2. Backend.AI "제품" 소개
    0차시
    2 / 46

    View Slide

  3. 딥러닝과 GPU의 시너지
    Deep Learning = 수십억 개 이상의 매개변수를 갖는 행렬 계산의 반복
    2015 Microsoft ResNet
    2015
    13,000
    2016 Baidu Deep Speech 2
    2016
    20,000
    Google NMT
    50억 달러
    2017
    6000만 파라미터
    700경 계산량
    3억 파라미터
    2000경 계산량
    계산량 산정: GOPS * bandwidth
    Reference: NVIDIA 2017 “A NET COMPUTING ERA”
    87억 파라미터
    1.05해 계산량
    1 2 3
    4 5 6
    7 8
    9 10
    11 12
    58
    1 + 7 + 2 + 9 + 3 + 11 = 58
    3 / 46

    View Slide

  4. 딥러닝과 GPU의 시너지
    DRAM
    Cache
    Control
    ALU
    ALU ALU
    ALU
    CPU GPU
    DRAM
    DRAM
    GPU = 동일 칩 면적 당 더 많은 연산회로(ALU)
    § 2007년 NVIDIA CUDA, 2009년 OpenCL 기술의 등장으로
    일반 C/C++ 개발환경을 그대로 쓰면서 GPU에서 돌아가는 코드를 쉽게 작성할 수 있게 됨
    § 이후 수치 연산, 머신러닝, 딥러닝 등에서 활용도가 크게 증가함
    CPU 싱글 쓰레드 퍼포먼스
    1000배
    (2025년까지)
    연간 1.5X
    연간 1.1X
    GPU 컴퓨팅 성능
    연간 1.5X
    102
    103
    104
    105
    106
    107
    1980 1990 2000 2010 2020
    4 / 46

    View Slide

  5. GPU 클라우드
    HPC & AI = GPU를 더 많이 도입할수록 더 절약되는 분야
    Cloud = 고집적 고밀도 연산자원 활용을 통한 비용 절감
    Note(s): CPU Baselined to 5000 Servers for each workload | Capex Costs: CPU node with 2x Skylake CPU’s ~$9K; GPU node with 4x V100 GPU’s ~$45K | Opex Costs: Power & cooling is $180/kW/month | Power: CPU serv
    er + n/w = 0.6 KW; GPU server + n/w = 1.6 KW; DGX-1V/HGX-1 Server = 3.2KW | HPC: GPU node with 4xV100 compared to 2xCPU Server | DL Training: DGX-1V compared to a 2xCPU server | DL Inference: HGX-1 based s
    erver (8xV100) Compared to 2x CPU Server |numbers rounded to nearest $0.5M
    Workload
    Baseline
    (CPU-Only)
    HPC
    (Amber,LAMPS)
    AI Training
    (TensorFlow)
    AI Inference
    (Image, Speech)
    Speed Up 1x 20x >100x 60x
    Servers 5,000 250 <50 84
    Capex $45M $11M $7.5M $7M
    3 Year Opex
    (Power+Cooling)
    $19.5M $2.5M $1M $1.5M
    TCO Saving N/A 79% 86% 86%
    GPU 클라우드
    5 / 46

    View Slide

  6. GPU 도입과 효율적 활용이 어려운 이유 (1/2)
    § '보조 장치'로서 운영체제에 의한 가상화 불가
    § I/O 지연에 의해 노는 시간 발생
    Extract
    Step 1
    Convert 1
    Extract
    Step 3
    Convert 2
    Load
    1
    Training 1
    Load
    2
    Extract
    Step 2
    Training 2
    GPU Idle time
    CPU Idle time
    Time
    Process
    Thread
    Page
    CPU / RAM / Disk
    File
    ?
    GPU
    OS의 기본 연산자원 가상화 blackbox ioctl()
    6 / 46

    View Slide

  7. GPU 도입과 효율적 활용이 어려운 이유 (2/2)
    빠른 릴리즈 주기
    (예: TensorFlow 6주)
    모델·프레임워크
    버전 관리
    SW 호환성 이슈
    CUDA 9.x
    CUDA 10.x
    Python 2.x
    Python 3.x

    Baremetal
    OS
    Container layer
    Containers Containers
    OS
    Container layer
    VM VM
    OS
    Containers
    Baremetal
    Container layer
    HPC 환경에서 컨테이너 기술은 아직 초기 단계 - 필요한 것들 :
    • 보다 적은 성능 오버헤드 (namespace의 선별적 적용)
    • Infiniband, RDMA 등 고속 네트워킹 기술 적용
    • MPI 스택을 위한 다중 컨테이너 분산처리
    • Batch job scheduler 적용
    • GPU 같은 연산 가속기 최적화
    7 / 46

    View Slide

  8. Backend.AI https://www.backend.ai
    기계학습 모델을 훈련하고
    실행하는 모든 과정을
    클라우드 또는 자신의 서버에서
    엄청나게 쉽고 빠르게 돌려주는
    세련된 플랫폼
    8 / 46

    View Slide

  9. Backend.AI https://www.backend.ai
    기계학습 모델을 훈련하고
    실행하는 모든 과정을
    클라우드 또는 자신의 서버에서
    엄청나게 쉽고 빠르게 돌려주는
    세련된 플랫폼
    9 / 46

    View Slide

  10. Backend.AI 개발 동기
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU ??? Backend.AI
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU GPU GPU
    GPU
    GPU
    § 관리자가 사용자별로 GPU 할당
    § 놀거나 부족한 자원 발생
    § SW 유지관리 어려움
    § Backend.AI가 GPU 통합 관리
    § 동적으로 그때그때 필요한 만큼만 사용
    § 컨테이너 기반으로 표준화된 SW 생태계
    10 / 46

    View Slide

  11. Backend.AI 사용 시나리오
    Backend.AI
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    Backend.AI
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU 클러스터 구축 고성능 GPU 공유
    Backend.AI
    GPU
    GPU
    GPU
    GPU
    GPU
    GPU
    데이터센터를 클라우드로
    동적 스케일링
    Cloud
    11 / 46

    View Slide

  12. Backend.AI 기반의 GPU 컴퓨팅 스택
    새로운 ML 앱 개발에
    필요한 시간과 비용 감소
    IaaS / OS
    하드웨어 인프라
    Brand Guidelines
    TensorFlow is an end-to-end open-source platform
    for machine learning. It has a comprehensive,
    flexible ecosystem of tools, libraries and community
    resources that lets researchers push the
    state-of-the-art in ML and developers easily build
    완전관리형 GPU 앱
    데이터
    과학자
    데이터
    분석가
    교육 강사와
    학생들
    응용소프트웨어
    개발자
    유연하고 효율적인
    GPU 활용
    컨테이너 수준
    GPU 가상화
    원클릭으로 실행하는
    GPU 개발환경
    관제·감시를 위한
    웹 기반 GUI
    Backend.AI Platform
    기존 사용자 환경을
    그대로 이용
    12 / 46

    View Slide

  13. Backend.AI 플랫폼 구성
    클라우드
    Fits with your needs
    instantly
    오픈소스
    Get the most out of
    your hardware
    엔터프라이즈
    End-to-end
    ML Infra Manager
    On-demand GPU envs
    for HPC and ML/DL
    with pay-as-you-go
    pricing
    Hackable, customizable
    computing framework
    with cutting-edge
    technologies
    Private GPU cloud &
    cluster managing solution
    for large-scale
    enterprises
    Backend.AI
    13 / 46

    View Slide

  14. Backend.AI 차별점
    § 머신러닝 컨테이너 관련 기술들을 단일 프레임웍으로 제공하는 유일한 솔루션
    • 개별 기능(예: scheduling)이나 다른 목적(예: microservice 호스팅)에 최적화된
    오케스트레이션 계층은 이미 시장에 다수 존재함
    • 실제 머신러닝 연구자·개발자들이 겪는 고충을 묶어서 해결하는 제품은 부족함
    § Backend.AI
    • GPU 최적화 기술 보유
    ­ NVIDIA 파트너십을 바탕으로 CUDA 최적 솔루션 구현
    ­ 업계 유일 컨테이너 기반 다중/부분 GPU 공유(fractional scaling) 지원
    • 동적 샌드박싱: 프로그래밍 및 재작성 가능한 syscall 필터
    ­ apparmor/seccomp 등 대비 풍부한 프로그래밍 가능한 정책 지원
    • Docker 기반의 레거시 앱 리소스 제한
    ­ OpenBLAS와 같은 수치연산 라이브러리가 인식하는 CPU 코어 수 보정
    14 / 46

    View Slide

  15. Demo
    Backend.AI
    15 / 46

    View Slide

  16. 구축 사례
    Backend.AI
    16 / 46

    View Slide

  17. Backend.AI 구축 사례: 국민대 빅데이터MBA
    § 경영대학에서 금융권 실무자 MBA 수강생 및 연구자들을 위한 GPU 서버팜 구축
    • 3대 서버 24개의 GPU로 80명 이상의 수강생들이 동시에 실습하는 한편, 다수 연구자들은 모델링 수행
    § 기술 사양
    • 수강생·연구자로 구분된 resource policy 적용
    • 노드별 대용량 HDD를 LAN으로 묶어 18 TiB ceph 분산 스토리지 구축 및 가상화
    • 학내 사용 가능한 Web GUI로 주요 기능을 제공하여 전담 관리자 없이도 최적 운영
    1 Gbps LAN
    24 NVIDIA GPUs
    노드별 듀얼 제온 CPU
    18 TiB
    분산파일시스템
    (cephfs)
    Manager + Agent Agent Agent
    ML classes with
    40+ students
    10+ graduates
    and researchers
    17 / 46

    View Slide

  18. § 계열사별 분리된 GPU Cloud 서비스를 위한 오케스트레이션 계층 제공
    Domain A
    Domain B
    Backend.AI 구축 사례: 금융그룹 Private GPU Cloud
    협업 내역
    • 망분리 환경을 위한 설치·실행 지원
    • 관계사 별 통합 관제
    • 관계사 단위 데이터 보안 / 시스템 격리
    • 사용자 계정 연동 및 과금 체계 적용
    • 그룹 내 사용 환경 최적화 (Windows용 client app 제공)
    그룹 통합 클라우드
    그룹 통합 데이터센터
    계열사별 독립 스토리지
    슈퍼어드민 콘솔
    18 / 46

    View Slide

  19. Backend.AI 구축 사례: Lablup GPU Cloud
    § 래블업에서 일반 사용자를 대상으로 직접 운영하는 Backend.AI 서비스 (B2C)
    • https://beta.cloud.backend.ai (베타테스트 중)
    • 가입만으로 바로 Backend.AI를 실행해볼 수 있음
    • 현재 제한적 무료 베타 서비스로, 유료화 및 고사양 워크로드 지원 예정 (2019Q3)
    § 기술 사양
    • AWS + Azure + GCP 통합
    • Google TPU 지원 (beta)
    • 데이터 저장을 위해 Azure FileShare + AWS EFS (Elastic File System) 연동
    DGX-2 Custom-built GPU nodes
    ap-northeast-2 평촌 IDC
    korea-south
    FileShare
    asia-east1
    EFS
    RDS TPUs
    Users
    Internet
    Manager + Agents
    Agents
    Agents 19 / 46

    View Slide

  20. Backend.AI 기술 로드맵
    기술 사양
    nvidia-
    docker
    Docker
    Swarm
    OpenStack Kubernetes
    Apache
    Mesos
    Backend.AI
    (현재)
    Backend.AI
    (목표)
    GPU 지원
    컨테이너별 GPU 할당
    이기종 가속기 지원
    (AMD, Google TPU 등)
    GPU 부분공유
    (fractional scaling)
    보안
    Hypervisor 및
    컨테이너에 의한 가상화
    프로그래밍 가능한
    샌드박싱
    가상화
    VM (Hypervisor)
    Docker 컨테이너
    스케줄링
    슬롯 기반
    고급 (DRF 등)
    통합
    최신 AI 프레임워크의
    파이프라인 통합
    ** 설치된 클라우드 벤더나 VM 환경에서 간접 지원
    *** 슬롯 기반이긴 하지만 label을 활용한 다양한 사용자화 지원
    ***
    **
    ** **
    **
    20 / 46

    View Slide

  21. Backend.AI 개발 역사
    1차시
    21 / 46

    View Slide

  22. 연구말싸미 듕귁에 달아 코드로 서르 사맛띠 아니할쌔 이런
    젼차로 어린 학도가 니르고져 홀빼이셔도 마참내 제 뜨들
    시러펴디 못할 노미 하니라.
    내 이랄 위하야 어엿비 너겨 새로 연구 코드 나누미와 과학
    공학 노리터를 맹가노니 사람마다 희여 수비니겨 날로 쑤메
    뼌한킈 하고져 할따라미니라.
    22 / 46

    View Slide

  23. 1~2년차: Project "Sorna"
    § 대표님이 쥬라기 공원 덕후
    • 지금도 서버 이름은 모두 공룡 이름을 따서 짓고 있음
    • CodeOnWeb은 프론트엔드니까 관광객들이 공룡을 구경하는 Isla Nublar
    • 뒤에 붙는 코드실행엔진은 백엔드니까 공룡 공장인 Isla Sorna
    § 나중에 알게 된 것...
    • 구글에 넣으면 제일 처음에 나오는 것
    • 고심 끝에 프로젝트를 해체...가 아니고
    Backend.AI로 이름을 바꿈!
    23 / 46

    View Slide

  24. 초기 기술 스택
    § 창업자 세 명이 모두 써본 언어 : Python
    • 이제 asyncio라는 게 나왔다던데?
    § AWS는 주변에 삽질해본 사람이 많으니까...
    § Jupyter Hub를 직접 쓰려니...
    • 다중 사용자 간 독립성 보장이 안 됨
    (실제 문서에 semi-trusted small group 권장)
    § 소프트웨어 배포와 호환성 문제 : Docker
    § 뚝딱뚝딱 조합하면 잘 되겠죠?
    • 천릿길도 한 걸음부터!
    • (근데 진짜 천릿길이었다...)
    24 / 46

    View Slide

  25. 응답하라 2015!
    § TensorFlow는 2015년 12월에 오픈소스로 공개되었음
    • 초기 버전은 1개의 GPU만 쓸 수 있고, 구글 내부 인프라에 대한 의존성을 주석처리·코드삭제 후 겨우
    돌아만 가게 만든 것이었음
    • 하지만 역시 사용자 수가 깡패더라...
    § Kubernetes는 2015년 4월에 "Borg"라는 이름으로 논문 발표 후 11월에 오픈소스 공개
    • 바로 그 학회(ACM EuroSys)에 발표자 본인도 논문 발표하고 박사 졸업
    § 그리고 그때는 인공지능이 뜨기 전...
    • 해외에서는 ImageNet의 성공으로 이미 기반을 닦아가던 상황
    • 우리나라는 "딥러닝? 그거 뭐임?" 상태
    § Project "Sorna"
    • 일반적인 과학·공학 연구 지원 플랫폼으로 시작하였는데...
    25 / 46

    View Slide

  26. 26 / 46

    View Slide

  27. 2~3년차 : Project "Backend.AI"
    § 2016년 12월 오픈소스 공개
    • 삼성오픈소스컨퍼런스(SOSCON)
    § 2017년 6월 이름 변경
    • Google Startup Advisor Summit을 통해 브랜딩 전문가들의 도움을 받아 브레인스토밍 및 이름 정정
    § 2017년 10월 v1.0 릴리즈
    • 물론 첫 버전은 언제나 그렇듯 버그 수정하느라...
    § 2018년 1월 v1.1: long-polling code execution model 완성
    § 2018년 1월 v1.2: manager의 가용량 기반 스케줄러 완성
    § 2018년 3월 v1.3: 모듈 아키텍처 및 플러그인 아키텍처 도입
    § 2018년 9월 v1.4: vfolder 대용량 업·다운로드 지원, CORS 지원, 최초의 GPU 공유 지원
    • 이 당시 GPU 공유는 TensorFlow를 수동 패치해서 구현
    • cloud.backend.ai / api.backend.ai BETA 서비스로 2019년 9월까지 유지됨
    27 / 46

    View Slide

  28. 4년차 이후
    § v18.12: 컨테이너 서비스 접속 기능 추가
    • Jupyter의 플러그인으로 Backend.AI 서비스를 붙이는 것이 아니라,
    Backend.AI 서비스 안에서 Jupyter를 실행하고 여기에 접속할 수 있게 함
    § v19.03: GUI → 독립 제품으로는 처음 팔린 버전!
    • 첫번째 공식 Web GUI 지원
    • 관리자 권한 강화 (타 사용자의 리소스 제어)
    • 프레임워크 패치 필요 없는 GPU 가상화(fractional scaling) 기술 첫 도입
    § v19.09: 대격변
    • 도메인/사용자그룹 지원 및 다층적 관리자 권한 설정 지원
    • High Availability 설치 지원
    • Job Scheduler 도입
    § v19.12+?
    • Kubernetes 환경 지원
    • AMD GPU 지원
    28 / 46

    View Slide

  29. Backend.AI 개발환경 구축하기
    2차시
    29 / 46

    View Slide

  30. 준비물
    § Linux PC / macOS Computer
    • Linux: 시스템 패키지 설치 가능한 sudo 권한 필요
    § Docker v18.09+
    • Linux: docker-ce 본체를 패키지로 설치 후 docker-compose 확장프로그램 별도 설치
    ­ https://docs.docker.com/install/linux/docker-ce/ubuntu/
    ­ https://docs.docker.com/compose/install/
    • macOS: Docker for Mac 설치하면 한방에 설치됨
    ­ https://hub.docker.com/editions/community/docker-ce-desktop-mac
    § Python 3.6.x
    • 안타깝게도 Python 3.7은 일부 패키지 호환 문제로 사용 불가
    • 원활한 추가 패키지 설치를 위해 C 컴파일러와 개발도구(make 등)가 설치되어 있어야 함
    • 공식 인스톨러가 pyenv 활용하여 자동 설치해줌 (별도로 설치할 필요 없음!)
    § Git 2.10+
    § tmux 2.6+
    30 / 46

    View Slide

  31. 확인 사항 (1/2)
    $ docker-compose version
    docker-compose version 1.24.1, build 4667896b
    ...
    $ docker version
    Client: Docker Engine - Community
    Version: 19.03.2
    API version: 1.40
    ...
    Server: Docker Engine - Community
    Engine:
    Version: 19.03.2
    API version: 1.40 (minimum version 1.12)
    ...
    $ git version
    git version 2.21.0
    (버전이 정확히 같을 필요는 없으나 Python 3.6.x,
    Docker 18.09.x 이후, Git 2.10 이후이면 됨)
    31 / 46

    View Slide

  32. 확인 사항 (2/2)
    (Linux)
    $ sudo whoami
    root
    (macOS)
    $ brew
    Example usage:
    brew search [TEXT|/REGEX/]
    brew info [FORMULA...]
    brew install FORMULA...
    ...
    32 / 46

    View Slide

  33. 설치하기
    $ git clone https://github.com/lablup/backend.ai meta
    (Linux)
    $ sudo meta/scripts/install-dev.sh
    (macOS)
    $ meta/scripts/install-dev.sh
    개발환경에 필요한 각종 의존성 패키지들을 확인 및 자동 업데이트를 진행
    ./backend.ai-dev 디렉토리 아래에 manager, agent, common, client-py 등의
    디렉토리가 자동으로 생성되어 소스코드가 복제됨
    이후 디렉토리별로 pip install 및 DB 초기화가 진행됨
    33 / 46

    View Slide

  34. 설치 완료 확인
    ...
    [INFO] Installation finished.
    [NOTE] Default API keypair configuration for test / develop:
    > export BACKEND_ENDPOINT=http://127.0.0.1:8081/
    > export BACKEND_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE
    > export BACKEND_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    ...
    [NOTE] How to run Backend.AI manager:
    ...
    [NOTE] How to run Backend.AI agent:
    ...
    Development environment is now ready.
    $ docker ps --format 'table{{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}'
    CONTAINER ID IMAGE NAMES STATUS
    a7afcbd991cf redis:5.0.5-alpine btpbz7e0_backendai-half-redis_1 Up About a minute
    f2de28406829 quay.io/coreos/etcd:v3.4.1 btpbz7e0_backendai-half-etcd_1 Up About a minute
    cdd29e3006a6 postgres:9.6.15-alpine btpbz7e0_backendai-half-db_1 Up About a minute
    34 / 46

    View Slide

  35. 테스트 코드 실행
    [Shell 1]
    $ cd ./backend.ai-dev/manager
    (venv-btpbz7e0-manager) $ python –m ai.backend.gateway.server –debug
    ...
    [Shell 2]
    $ cd ./backend.ai-dev/agent
    (venv-btpbz7e0-agent) $ python –m ai.backend.agent.server –debug
    ...
    [Shell 3]
    $ cd ./backend.ai-dev/agent
    (venv-btpbz7e0-client) $ cat > env-local-user.sh
    export BACKEND_ENDPOINT=http://127.0.0.1:8081
    export BACKEND_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE
    export BACKEND_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    (venv-btpbz7e0-client) $ source env-local-user.sh
    (venv-btpbz7e0-client) $ backend.ai config
    ...
    (venv-btpbz7e0-client) $ backend.ai run –c "print('hello world')" python
    35 / 46

    View Slide

  36. 설치 도중 문제 발생하여 취소 또는 삭제하기
    $ sudo meta/scripts/delete-dev.sh -e xxxxxx
    xxxxxx 부분에 docker 컨테이너 이름, virtualenv 이름 등에서 가져올 수 있는 무
    작위 생성된 고유식별자(environment ID)를 넣을 것.
    docker-compose를 이용해 띄워진 컨테이너와 가상네트워크 삭제.
    pyenv로 생성된 virtualenv 환경 삭제.
    backend.ai-dev 디렉토리 하위의 모든 파일·디렉토리 삭제.
    (일부 오류가 발생하더라도 무시하고 최대한 삭제를 진행함)
    36 / 46

    View Slide

  37. 흔히 겪는 문제
    § 포트 번호를 다른 프로그램이나 데몬이 점유하고 있음
    • 해당 데몬을 종료시킴
    • 예) apache, nginx가 8080 포트를 사용 중
    § (macOS) 첫번째 단계에서 너무 오래 걸리거나 repository ... not found 오류
    • homebrew에서 더 이상 사용되지 않는 패키지 저장소를 tap하고 있을 수 있음
    • $ brew tap-info --installed
    • $ brew untap
    § (macOS) cannot start service backendai-half-xxxx: b'Mounts denied: ...\r\nis
    not shared from OS X and is not known to Docker.
    • Docker for Mac의 Preference 창에서 설치 진행 중인 디렉토리 또는 그 상위 디렉토리를 File Sharing
    탭의 보안 예외 목록에 추가해준 다음 Apply & Restart 하고 설치를 다시 진행한다.
    37 / 46

    View Slide

  38. 흔히 겪는 문제
    § 설치 진행 중 누런 색깔의 warning log로 etcd 접속 오류가 반복해서 뜨고 있음
    • docker 또는 docker-compose 설치가 제대로 안 되어 etcd 컨테이너가 뜨지 않은 상태에서 manager
    CLI로 etcd 명령어를 실행하면 계속 재시도하게 됨
    • 간혹 docker-compose 자체가 너무 옛날 버전이어서 그런 경우도 있음
    • docker-compose를 최신 버전으로 업데이트하고 실행 여부를 확인한 뒤 다시 진행한다.
    § pyenv 명령 오류
    • 설치를 중단하고 source ~/.bashrc (또는 자신의 쉘의 설정파일) 실행 후 재시도한다.
    • 그래도 안 되면 직접 현재 쉘에서 다음 실행:
    ­ eval "$(~/.pyenv/bin/pyenv init -)"
    ­ export PATH="~/.pyenv/bin:$PATH"
    • 참고) 설정 자동 추가가 지원되는 쉘 설정파일 : zshrc, bashrc, profile, bash_profile
    38 / 46

    View Slide

  39. 흔히 겪는 문제
    § (macOS) 설치는 다 되었는데 코드 실행할 때 발생하는 다음 오류
    • -> Agent-side error: DockerError(500, 'OCI runtime create failed: container_linux.go:345:
    starting container process caused "process_linux.go:430: container init caused
    \\"rootfs_linux.go:58: mounting \\\\\\"/Users/joongi/knu-class/backend.ai-
    dev/agent/src/ai/backend/helpers\\\\\\" to rootfs \\\\\\"/var/lib/docker/overlay2/ ...
    • Docker Desktop for Mac에서 File Sharing 설정에 ~/.pyenv가 없는 상태로 agent를 실행하여
    backendai-krunner.v2.{ubuntu16.04,centos7.6,alpine3.8} 볼륨이 모두 빈 상태로 생성된 경우 발생
    • docker volum rm 명령으로 위 볼륨을 모두 삭제하고,
    (만약 사용 중인 컨테이너가 있다는 오류가 발생하면 docker rm –f 명령으로 강제 삭제)
    • File Sharing 설정에 ~/.pyenv를 추가하고 Docker 데몬을 재시작한 다음,
    • install-dev.sh 실행결과 말미에 안내된 대로 docker-compose 명령으로 컨테이너들을 다시 띄우고,
    • agent를 재실행하면 해결됨
    39 / 46

    View Slide

  40. 유용한 manager.cli 명령어들 (1/2)
    [Manager]
    (venv-xxxx-manager) $ python –m ai.backend.manager.cli dbshell
    설정된 주소와 인증 정보를 이용하여 database shell을 열어줌. SQL로 직접 데이터베이스 조작 가능.
    위 명령을 실행하려면 psql-client 패키지(psql 명령어 제공)가 설치되어야 함.
    \dt : 모든 테이블 보기
    \d+ tablename : 테이블 정의 보기
    그 외 SQL 문장들은 끝에 세미콜론(;)을 붙여주고 실행
    (venv-xxxx-manager) $ python –m ai.backend.manager.cli etcd get --prefix config
    etcd key-value store의 내용을 직접 조작할 수 있는 명령어 체계 제공함.
    Backend.AI의 prefix와 namespace가 이미 적용된 상태로 key 이름을 사용할 수 있다.
    $ docker exec –it xxxx_backendai-half-etcd_1 etcdctl get --prefix /sorna/local/config
    위와 동일하지만 prefix, namespace 없이 날 것 그대로의 etcd 명령어를 쓸 수 있음.
    40 / 46

    View Slide

  41. 유용한 manager.cli 명령어들 (2/2)
    [Manager]
    (venv-xxxx-manager) $ python –m ai.backend.manager.cli etcd rescan-images index.docker.io
    현재 공개되어 있는 Backend.AI용 최신 Docker image 목록을 갱신한다.
    이렇게 받아온 이미지 정보들은 etcd의 "images" key prefix 아래에 저장되며, 이후 해당 이미지를 사용하는 세션을 실행하면
    agent가 자동으로 최신 버전을 받는다.
    (venv-xxxx-manager) $ python –m ai.backend.manager.cli etcd list-images
    Backend.AI manager가 알고 있는 모든 이미지 정보를 출력한다.
    (venv-xxxx-manager) $ python –m ai.backend.manager.cli etcd inpsect-image lablup/python:3.6-ubuntu18.04
    특정 Docker image에 대해 Backend.AI manager가 알고 있는 정보를 출력한다.
    이미지별로 필요한 최소 자원 요구량 등의 정보를 알 수 있다.
    41 / 46

    View Slide

  42. Backend.AI 코드 구조 살펴보기
    3차시
    42 / 46

    View Slide

  43. 주요 컴포넌트
    ai.backend.gateway
    ai.backend.manager
    ai.backend.agent
    └ ai.backend.agent.docker
    ai.backend.client
    ai.backend.kernel
    ai.backend.common
    ai.backend.runner
    #
    ai.backend.common
    User Program
    Agent Node
    Manager Node
    Container
    Client Node
    Redis PostgreSQL etcd
    /opt/backend.ai
    43 / 46

    View Slide

  44. Backend.AI 기여 방법
    3차시
    44 / 46

    View Slide

  45. GitHub
    § https://github.com/lablup/backend.ai
    • "Meta" repository - 설치 스크립트와 README 외에 별다른 내용은 없음
    • 하위 프로젝트들은 backend.ai-xxxx 형태의 이름을 가지고 있음
    § Issue
    • 어느 프로젝트와 연관된 내용인지 잘 모르겠으면 일단 meta repository에 issue 등록
    • Feature Request / Bug Report 2가지 양식이 제공되지만,
    별도 양식 사용하지 않고 일반적인 질문이나 기타 의견을 올릴 수도 있음
    § Pull Request
    • 최소 요구 사항 : Contributor License Agreement 동의, flake8에 의한 코딩스타일 검사 통과
    • 가능하면 최신 Python 표준 라이브러리 사용 (예: os.path 대신 pathlib)
    • 완성되지 않은 코드라도 일단 draft pull request로 올리고 피드백 받는 것도 좋음
    § 채팅방 (GitHub 계정 연동)
    • https://gitter.im/lablup/Lobby
    45 / 46

    View Slide

  46. Thank you!
    들어주셔서 감사합니다!
    Lablup Inc.
    Backend.AI
    Backend.AI GitHub
    Backend.AI Cloud
    https://www.lablup.com
    https://www.backend.ai
    https://github.com/lablup/backend.ai
    https://cloud.backend.ai
    !
    CB A
    !
    / .!
    / .! :
    / .! .
    :: ! !
    :: ! / .!
    :: : ! / .!
    :: .! / .!
    46 / 46

    View Slide