papermill을 사용해 보았습니다.

소개



「Jupyter만으로 기계 학습을 실제 서비스 전개할 수 있는 기반」 을 읽고, 기초에 jupyter notebook를 직접 짜넣다니 할 수 있을까 매우 감탄했습니다. 기사 속에서 jupyter notebook을 외부에서 실행할 수 있는 'papermill'이라는 라이브러리가 등장했으므로, 이것을 사용해 보고 싶습니다.

참고


  • nteract/papermill

  • 환경


  • macOS Catalina 10.15.3(19D76)
  • 파이썬 3.7.5

  • 절차



    설치


    pip install papermill
    

    실행



    폴더 구성은 다음과 같이 했습니다. input.ipynb에서 실행하려는 노트북에서 실행 코드를 main.py에 씁니다.
    work/
     ├ main.py
     └ input.ipynb
    
    input.ipynb 의 내용은 매우 간단하게 아래와 같이 했습니다.



    여기서 첫 번째 셀에는 parameters라는 태그가 있습니다. 태그는 메뉴에서 View-Cell Toolbar - Tags를 선택하면 셀 오른쪽 상단의 텍스트 상자가 표시되므로 여기에 parameters를 입력하고 Add tag를 클릭하여 추가합니다. papermill은 노트북에서 parameters 태그가 붙은 셀을 찾아 가서 셀의 변수를 다시 쓸 수 있습니다.

    파이썬 API에서 실행하는 방법은 다음과 같습니다. 실행 후 노트북이 ./output.ipynb로 출력됩니다.

    main.py
    import papermill as pm
    
    pm.execute_notebook(
       './input.ipynb',
       './output.ipynb',
       parameters = dict(alpha=0.6, ratio=0.1)
    )
    
    python main.py에서 실행합니다.
    $ python main.py 
    Executing: 100%|████████████████████████████████| 3/3 [00:01<00:00,  1.80cell/s]
    
    ./output.ipynb 를 열면 다음과 같습니다. Injected-parameters라는 태그가 있는 셀이 추가되었으며 매개 변수를 덮어씁니다.



    CLI에서 실행하려면 다음을 수행합니다. boolean이나 수치는 papermill이 마음대로 판단해 줍니다.
    $ papermill ./input.ipynb ./output.ipynb  -p alpha 0.6 -p ratio 0.1
    Input Notebook:  ./input.ipynb
    Output Notebook: ./output.ipynb
    Executing: 100%|████████████████████████████████| 3/3 [00:01<00:00,  2.67cell/s]
    

    매개변수는 yaml 파일에서도 지정할 수 있습니다.
    work/
     ├ main.py
     ├ input.ipynb
     └ parameters.yaml
    

    CLI에서 다음과 같이 실행합니다.
    papermill ./input.ipynb ./output.ipynb -f ./parameters.yaml
    

    클라우드 스토리지에 저장할 수도 있습니다. 이 경우 옵션도 설치해야 합니다.
    pip install papermill[all]
    
    ./output.ipynb 부분을 클라우드 대상으로 바꿉니다. 다음은 AWS S3의 예입니다. CLI에서 configure되어 있으면 실행할 수 있습니다.
    papermill ./input.ipynb s3://xxxxxxxxxx/output.ipynb -f ./parameters.yaml
    



    출력처를 입력과 동일하게 하면 덮어쓰기가 됩니다.
    papermill ./input.ipynb ./input.ipynb -f ./parameters.yaml
    

    여러 번 반복해도 Injected-parameters 셀을 덮어 쓸 수 있기 때문에 제대로 매개 변수를 다시 씁니다.

    결론



    flask로 관리 화면을 만들어 학습이나 관리할 수 있으면 재미있을 것 같습니다.

    좋은 웹페이지 즐겨찾기