AWS 및 제지 공장을 통해 전 세계에 Jupyter 노트북 보급

데이터 과학자로서 페스에 대해 내가 가장 감동적인 일 중 하나는 데이터 과학이 우리 제품의 핵심이라는 것이다.
우리 데이터 공학팀의 책임자로서 나는 우리의 데이터 과학이 신속하게 증가하는 전 세계 고객층의 수요를 만족시키기 위해 확장될 수 있도록 확보할 책임이 있다.
본고에서 나는 우리가 데이터 과학 제품을 확장하는 방법 중 가장 재미있는 부분과 우리가 반드시 해결해야 할 독특한 도전을 공유할 것이다.

Faethm은 작업 진화에 사용되는 데이터 과학입니다.



우리의 방법을 깊이 연구하기 전에 중요한 것은 피스에 관한 몇 가지 일과 우리가 하는 일을 이해하는 것이다.
우리의 고객들은 우리가 업무의 미래와 기술과 업무 모델의 변화가 그들의 가장 관건적인 자산인 직원에게 미치는 영향을 이해하는 데 의존한다.
우리의 데이터 과학팀은 우리의 직업 본체를 설계하고 구축하는 것을 책임지고'업무'의 개념을 역할, 임무, 기능과 무수한 동태 분석 속성으로 분해하여 가장 상세한 방식으로 이 모든 것을 묘사한다.우리의 분석은 끊임없이 증가하는 적당한 기계 학습 모델에서 나온다.
우리의 플랫폼은 이 모든 것을 한데 연결시켜 직원 지도자, 전략 지도자와 기술 지도자가 그들의 직원 대오를 더욱 잘 결정하도록 돕는다. 그 상세도와 통찰력의 속도는Faethm가 없으면 실현할 수 없다.

저희는 Python과 Jupyter 노트북으로 데이터 과학을 하고 있습니다.


우리의 데이터 과학자들은 주로 Python, Jupyter 노트북과 끊임없이 증가하는 Python 패키지를 사용하여 데이터 변환, 분석, 모델링을 한다. 이것은 어떤 데이터 과학자의 도구 패키지에서도 볼 수 있다.
다행히도 구름 속에서 상호작용식 Jupyter 작업대를 실행하는 것은 매우 간단하다.

AWS SageMaker는 필요에 따라 관리형 컴퓨팅 인스턴스를 구성하고 필요에 따라 열고 닫는 노트북 플랫폼을 제공합니다.강력한 모델링 환경을 직접 액세스하려면 몇 가지 IAM 역할 정책을 관리하고 AWS 콘솔을 클릭해야 합니다.
이는 데이터 과학자들이 AWS 컨트롤러에 단일 로그인하여 다음 프로젝트를 시작하고 그들의 접근 프로필이 허용하는 모든 S3 데이터에 접근할 수 있음을 의미한다.결과적으로 S3를 다시 쓰고, 노트북을 적절한 Git 저장소로 가져옵니다.
우리는 어떻게 그것을 제품으로 바꾸어 우리의 데이터 과학자들이 운행 조작 작업 흐름을 고려할 필요가 없게 합니까?

노트북을 재설계할 필요가 없는 엔지니어링 데이터 과학


우리 방법의 핵심 설계 목표 중 하나는 가능한 한 데이터 과학 작업 흐름을 재설계하지 않고 확장하는 것이다.
우리 모델의 복잡성 때문에 데이터 과학자들은 반드시 그 모델이 생산 중의 운행 상황을 완전히 투명하게 이해해야 한다.그래서 우리는 Jupyter 노트북을 다시 쓸 필요가 없다.우리는 심지어 그 중의 코드를 실행 가능한Python 스크립트에 복사하지 않는다.우리는 단지 서면 형식에 따라 그것들을 집행할 뿐, 어떠한 변경도 필요 없다.
우리는 제지기로 이렇게 한다.

Papermill은 Jupyter 노트북을 매개 변수화하고 실행하는 데 사용되는 Python 패키지입니다.동적 기능의 매개 변수 (일반적으로 첫 번째 노트 단원에서 합리적인 기본값을 가진) 를 사용하여 노트를 작성하면 Papermill은 명령줄에서 노트 $NOTEBOOK 를 실행할 수 있습니다.모든 파라미터(-rraw 또는 -pnormal)는 실행할 때 덮어쓸 수 있습니다. Papermill은 새로운 노트북 단원을 주입하여 새로운 파라미터 값을 분배함으로써 이 점을 실현합니다.
간단한 Papermill 명령행 작업은 다음과 같습니다.
pip install papermill
papermill "$NOTEBOOK" "$OUTPUT_NOTEBOOK" \
    -r A_RAW_PARAMETER "this is always a Python string" \
    -p A_PARAMETER "True" # this is converted to a Python data type
Papermill은 코드뿐만 아니라 노트를 실행하기 때문에 인쇄문, 오류 메시지, 표, 그림 등 셀 출력은 결과 출력 노트에 나타난다 $OUTPUT_NOTEBOOK.이는 노트 자체가 풍부한 로그가 되어 실행 내용을 정확하게 기록하고 데이터 과학자들이 모델의 성능을 평가하고 그 어떠한 절차의 이상을 측정하는 우호적인 진단 도구가 되었다는 것을 의미한다.

복사 가능한 노트북 워크플로우


Papermill은 우리의 노트북을 실행하기에 매우 적합하지만, 우리는 SageMaker의 실례를 제외하고는 노트북을 실행해야 한다.우리는 노트 옆에서 추가 부품을 포획하여 이 점을 실현할 수 있다.
우선 패키지 종속 항목 목록을 프로젝트의 Git 저장소에 저장합니다.이것은 Jupyter 단말기pip freeze > requirements.txt에서 쉽게 생성되지만, 일반적으로 수동으로 제작하여 요소에 대한 의존성을 유지하는 것이 가장 좋다.
다른 의존 항목도 저장소에 저장됩니다.스크립트,pickle 대상(예를 들어 훈련을 받은 모델)과 유니버설 메타데이터를 포함할 수 있다.
또한 YAML 구성 파일에서 메타데이터를 캡처합니다.
...
Notebooks:
 - my-notebook.ipynb
 - my-second-notebook.ipynb
...
이 파일은 실행 순서에 따라 노트를 열거하기 때문에 워크플로우는 여러 개의 독립된 노트로 구성되어 가독성을 유지할 수 있다.
마지막으로 구축 프로세스를 시작하는 간단한 buildspec.yml 프로필을 포함합니다.이것은 우리가 파이프를 구축하는 데 사용하는 AWS 코드 구축의 표준이다.
다른 소프트웨어 프로젝트와 마찬가지로 노트북, 의존 항목 및 기타 저장소 항목의 변경은 생산 및 비생산 Git 지점의 조합을 통해 관리됩니다.Pull 요청은 무대와 생산 환경 사이에서 코드 업그레이드를 하는 과정을 제공하고 수동 코드 심사와 일련의 합병 검사의 자동화를 추진하여 코드 변경의 신뢰도를 높인다.

프로덕션 배포를 위한 노트북 컨테이너


우리 데이터 과학팀은 파이프라인 구축이 아니라 데이터 과학 작업 흐름을 만드는 데 전념하기 위해 용기 구축과 배치 과정은 하나의 Jupyter 프로젝트에서 추상적으로 나온 것이다.
각 Git 저장소에는 Webhook이 구성되어 있습니다.노트북 프로젝트로 전송되는 지점은 구축 과정을 촉발합니다.임시 저장 및 생산 지점은 모든 변경 사항을 요청함으로써 오류 제출을 방지합니다.
표준Dockerfile 구축 시 프로젝트 저장소에 저장된 가공소재를 사용합니다.
FROM python:3.7

RUN pip install papermill

# package dependencies
COPY requirements.txt
RUN pip install -r requirements.txt

# notebook execution order from YAML config
ARG NOTEBOOKS
ENV NOTEBOOKS=${NOTEBOOKS}

# prepare entrypoint script
COPY entrypoint.sh

# catch-all for other dependencies in the repository
COPY .

# these parameters will be injected at run-time
ENV PARAM1=
ENV PARAM2=

CMD ./entrypoint.sh
입구점은 교체 bash 스크립트입니다.
#!/bin/bash

for NOTEBOOK in ${NOTEBOOKS//,/ }
do
    papermill "$NOTEBOOK" "s3://notebook-output-bucket/$NOTEBOOK" \
        -r PARAM1 "$PARAM1" \
        -p PARAM2 "$PARAM2"
done
entrypoint.sh 스크립트는 이 프로필을 따라 실행할 때 각 노트북을 실행하고 생성된 노트북 출력을 S3에 저장합니다.

AWS CodeBuild는 저장소 지점에서 대상 환경을 확인하고 컨테이너를 구축하여 AWS ECR로 전송하여 컨테이너 인프라에 배포할 수 있도록 합니다.

Jupyter 노트북의 서버 없는 작업 수행


Faethm의 고객은 세계 각지의 많은 다른 지역에 널리 퍼져 있기 때문에 데이터는 모든 고객의 소재지 관할 구역의 데이터 법규의 제약을 받는다.우리의 데이터 과학 작업 흐름은 고객이 지정한 데이터 저장 구역에서 실행할 수 있어야 한다.우리의 방법을 사용하면 데이터를 영역 간에 전송하여 처리할 필요가 없다.
우리는 아시아태평양 지역, 미국, 유럽을 포함한 전 세계의 점점 더 많은 고객 지역에서 클라우드 환경을 운영한다.페스가 계속 규모를 확대함에 따라 우리는 새로운 지역을 지지할 수 있어야 한다.

Jupyter 노트북 컨테이너를 실행하기 위해 지원되는 영역마다 ECS Fargate 클러스터가 있는 VPC가 있으며 필요에 따라 노트북 작업을 실행하도록 구성됩니다.
각 Jupyter 프로젝트는 ECS 작업 정의와 연결되며, ECS 작업 정의 템플릿은 파이프라인을 구축하고 CloudFormation을 통해 배치됩니다.

이벤트 구동 Jupyter 노트북 작업


작업 수행을 단순화하기 위해 각 노트북 저장소에는 이벤트 트리거가 있습니다.일반적으로 노트북 작업은 데이터 객체에 응답하기 위해 S3에 로그인하는 작업을 실행합니다.예를 들어 사용자 포털에서 업로드된 CSV를 바탕으로 분석합니다.
프로젝트 저장소에서 YAML 구성 파일은 S3 버킷과 접두사를 캡처합니다. EventBridge에 전송된 CloudTrail 로그가 일치하면 버킷과 접두사는 ECS 작업 정의를 촉발합니다.
...
S3TriggerBucket: notebook-trigger-bucket
S3TriggerKeyPrefix: path/to/data/
...

EventBridge 규칙 템플릿은 파이프 구성을 구축하고 CloudFormation을 통해 배포되므로 Jupyter 노트북의 기본 요구 사항을 자동으로 실행할 수 있습니다.

그것들을 한데 모으다


본고에서 우리는 여러 지역 환경에서 데이터 과학 업무 흐름을 확장하고 자동화하는 데 대한 도전을 토론했다.Jupyter 생태계에서 이러한 문제를 해결하는 방법과 각종 AWS 서버 없는 제품을 활용하는 해결 방안을 연구했습니다.
이 모든 것을 함께 놓으면 결과적으로 서버가 없는gitops 용기화 이벤트로 Jupyter 노트북을 코드 데이터 과학 작업 흐름 실행 파이프 구조로 구동합니다.

우리는 notebook-pipeline라고 부른다.
너는 줄곧 Faethm AI 공학 블로그의 글을 읽고 있다.우리도 모집하고 있어!미래의 업무에 대한 열정을 여러분과 공유하고 세계 최고의 데이터 과학과 공학 프로젝트를 개척하고자 한다면 저희는 당신의 목소리를 기꺼이 듣겠습니다.현재 비어 있는 직위 보기: https://faethm.ai/careers

좋은 웹페이지 즐겨찾기