メインコンテンツまでスキップ

런박스

런박스

AI 디지털교과서 자체 환경이 아닌 컨테이너 기반 실습 환경을 사용하기 위한 시스템입니다.

기본적으로 Jupyter Notebook(.ipynb 형식의 파일) 및 Orange 3와 같은 서드파티 환경을 제공합니다.

1️⃣ 주요 기능

런박스와 관련된 주요 기능 리스트는 다음과 같습니다.

  • 런박스 생성/관리
    : 선생님은 런박스 실습 환경을 직접 제작하고 관리할 수 있습니다.
    (GPU가 포함된 고성능 런타임이 할당된 경우, 머신러닝 및 딥러닝과 같은 AI 모델 학습 환경도 원활하게 이용 가능합니다.)
  • 커스텀 실행 환경 제작
    : 기본 제공되는 실행 환경에 실습 시 필요한 라이브러리를 설치하여 사용할 수 있습니다. (bash 쉘 스크립트 지원)
  • 학습 자료 업로드
    : 실습 환경에서 기본 자료로 제공할 파일을 업로드할 수 있습니다. 기본 실행 환경 포맷(예: .ipynb)으로 구성된 zip 확장자를 지원합니다.
  • 채점 스크립트 업로드
    : 실습자의 실행 코드를 채점할 수 있는 채점 코드를 업로드할 수 있습니다. 스크립트 파일 포맷은 .py만 지원합니다. (zip 확장자 지원)
  • 데이터셋 업로드
    : 실습 시 활용 가능한 기본 데이터셋(CSV, JPG 등)을 업로드할 수 있습니다. (zip 확장자 지원)

2️⃣ 런박스 생성 및 관리

선생님은 AI 모델 학습을 위한 런박스 실습 환경을 직접 제작하고 관리할 수 있습니다.

▶️ 런박스 생성

  1. 과목 편집> 수업 > 자료 추가 클릭 후 ‘Runbox 환경’을 선택합니다.


  1. 수업 자료 제목, 학습 완료 방법, 사용 런타임, 런박스 실행 환경(Jupyter Notebook, Orange 3) 을 설정합니다.

▶️ 런박스 관리

  1. 생성된 런박스의 수업자료 수정 페이지로 진입합니다.


  1. 런박스 실습과 관련된 상세 설정을 진행합니다.

▶️ 런박스 자료 구조

  • 기본 설정: 수업 자료 제목, 사용 런타임, 런박스 실행 환경, 실행 스크립트를 변경할 수 있습니다.
  • 학습 수업 자료 : 실습 환경에서 기본적으로 제공되는 스크립트 자료로, 학습을 시작하기에 적합한 스켈레톤이나 템플릿 파일이 이에 해당합니다. 파일 포맷은 기본 실행 환경(Jupyter Notebook 및 Orange 3)을 기준으로 작성되어야 합니다.
  • 채점 스크립트 : 실습자의 실행 코드를 채점할 수 있는 스크립트 자료입니다.
  • 데이터셋 : 실습 시 필요한 기본 소스(예: 모델 학습 시 사용될 강아지 사진 100장) 파일입니다. CSV, XML, JSON, NPY, JPG 등의 파일 포맷을 지원합니다.

채점 스크립트 및 데이터셋은 필요한 경우에만 작성 및 업로드해 주세요.

제작된 학습 자료, 채점 스크립트 및 데이터셋은 자료 수정 내 각 탭에서 .zip 확장자 형태로 업로드 가능합니다.

▶️ 런박스 자료 저장 위치

  • 학습 수업 자료: 컨테이너 내부 /home/aidt에서 확인 가능합니다.
  • 데이터셋: 컨테이너 내부 /mnt/aidt/dataset 경로에서 확인 가능합니다.
  • 채점 스크립트: 컨테이너 내에서 확인이나 접근이 불가능한 위치에 저장됩니다.

3️⃣ 런박스 채점 스크립트

런박스 채점 스크립트 작성 방법을 설명합니다.

▶️ 런박스 채점 구조

런박스 채점은 파일 업로드를 기반으로 진행하고 있습니다.

학생이 제출한 파일 기반 제출물로 Python 스크립트가 해당 제출물을 검증하게 됩니다.

학생의 제출물은 제출 당 모든 파일의 압축 후 용량을 50MB로 제한됩니다.

매 제출 시 점수와 제출물은 서버에 저장되어 추후 확인할 수 있습니다.

▶️ 권장 제출 가능 파일

제출 가능한 파일은 제한되지 않으나 다음 타입으로 한정하기를 권장합니다.

Python 기반 실습의 경우 객체 직렬화를 위해 pickle을 사용하는 경우가 종종 있습니다.

하지만, pickle 사용 시 임의의 코드를 실행할 수 있는 등의 보안상의 이유로 사용을 권장하지 않습니다 (공식 문서 참고).

JSON

경진대회를 제외한 대부분 경우에 가장 권장하는 제출 파일 포맷입니다.

CSV

경진대회의 제출물 포맷으로 권장합니다.
이외의 경우는 제출 파일과 정답 파일 모두 CSV를 쓰지 말고 JSON을 사용하는 것이 권장됩니다.

PNG

Matplotlib, seaborn 등의 plot 결과를 채점할 때 사용합니다.
이미지가 완전히 같은지를 검사하기보다는 유사도를 계산하는 방식을 사용하는 것이 좋습니다.

NumPy array (.npy)

NumPy array를 바로 return 하는 함수로 채점을 진행할 때 사용합니다.

▶️ 채점 스크립트 작성

런박스는 채점 요청을 받을 경우 런박스 생성/관리 페이지에서 업로드한 zip 파일 내에 포함된 grader.py 를 실행하게 됩니다. Grader 스크립트는 학생이 채점 요청을 할 때 같이 제출된 제출물들을 /mnt/aidt/userfile 에서 액세스할 수 있습니다. 이 제출물들을 Python 스크립트로 검증하고 점수와 메시지를 학생에게 리턴할 수 있습니다.

Zip 파일 내에는 grader.py 뿐만 아니라 채점을 진행할 때 필요한 다른 리소스를 포함할 수 있습니다. 예를 들면, 레퍼런스 파일과의 비교를 통한 채점을 진행하고 싶은 경우 이 파일을 zip 파일 내에 포함할 수 있습니다. zip 파일 내에 포함된 파일들은 /mnt/aidt/grader에서 채점 스크립트만 액세스할 수 있으며, 학생은 접근이 불가능합니다.

  • 점수의 경우 /var/run/aidt/grade_score 파일에 UTF-8 인코딩으로 작성된 점수를 print 하면 됩니다. 정수 및 실수형 점수를 모두 지원합니다.
  • 메시지의 경우 /var/run/aidt/grade_message에 UTF-8 인코딩으로 작성된 메시지를 print 하여 학생에게 피드백을 전달할 수 있습니다.

가장 간단한 채점 스크립트의 예는 다음과 같습니다.

import json
from scipy.spatial.distance import cosine

score = None
message = ""

try:
with open("/mnt/aidt/grader/reference.json", "r") as f:
reference = json.load(f)
with open("/mnt/aidt/userfile/result.json", "r") as f:
user_result = json.load(f)

similarity = cosine(
reference,
user_result['submission']
)

score = similarity
if similarity < 0.1:
score = "100"
message = "good job!"
elif user_result < 0.5:
score = score = 100 * (1 - (similarity - 0.1) / 0.4)
score = f"{score:.3f}"
message = "well done"
else:
score = "0"
message = "try again"

except FileNotFoundError:
score = "0"
message = "missing required files"

except Exception:
score = "0"
message = "something goes wrong :("

finally:
if score is not None:
with open("/var/run/aidt/grade_score", "w") as f:
f.write(str(score))

with open("/var/run/aidt/grade_message", "w") as f:
f.write(message)

▶️ 채점 스크립트 실행

채점 스크립트가 구성된 이후 런박스 내부에서 다음 명령어를 실행하면 채점이 진행됩니다.

aidt_grade result.json code.ipynb

JupyterLab 기반 실습의 경우 다음과 같이 명령어를 런박스 내 학습 자료에 미리 제공하여 학습자가 명령을 쉽게 실행할 수 있도록 제공하는 것이 좋습니다. Orange3 및 VSCode 기반 실습의 경우 채점 스크립트 실행 UI가 제공됩니다.

▶️ 채점 수행

아래 코드는 채점 수행을 위한 코드입니다.

▶️ 복잡한 채점 예시

  • 한 번에 여러 파일을 제출받아 문제별로 가중치를 고려한 채점을 진행할 수 있습니다.
  • 예를 들어 그래프나 이미지를 생성하는 실습의 경우, 이미지나 바이너리를 제출받아 채점을 진행할 수 있습니다.
  • 간단한 기계학습 모델 자체를 제출받아 모델의 inference 결과를 가지고 채점을 진행할 수 있습니다.
    • 학생의 런타임에 관계 없이 채점은 CPU만 사용하므로, 주의가 필요합니다.