프로젝트용 GPU · KYC 없는 암호화폐 결제 대여 방법
한국어
콘솔 열기
실전 가이드 / KERNODECK

노트북은 작동합니다. 셀 없이 다시 실행할 수 있나요?

노트북에서 스크립트로 전환하려면 빈 커널에서 다시 시작해 입력을 식별하고 계산을 함수로 추출하세요. 그런 다음 프로그램에 명시적 인수와 별도의 출력 대상을 부여하세요. 성공 여부는 예상 결과와 함께 새로운 프로세스에서 검증됩니다. 셀을 Python 파일로 내보내는 것만으로는 경험을 재현 가능하게 만들 수 없습니다.

5 분 소요 · 개발자 가이드

1. 커널이 아직 알고 있는 것 찾아내기

노트북 파일과 커널 상태가 항상 같은 이야기를 하는 것은 아닙니다. 삭제된 셀에서 온 변수일 수도 있고, 목록이 여러 번 수정되었을 수도 있으며, 마지막 코드 변경 전에 로드된 객체가 메모리에 남아 있을 수도 있습니다. 따라서 표시된 결과만으로는 현재 셀들이 보이는 순서대로 여전히 그 결과를 생성한다고 증명할 수 없습니다.

작업 사본을 보관하고, 커널을 재시작한 다음 처음부터 끝까지 셀을 실행하세요. 실패하거나 결과가 달라지는 첫 번째 셀을 기록하세요. 이전 세션에서 변수를 수동으로 다시 주입하지 말고 누락된 의존성을 찾으세요. Jupyter 커널은 별도의 프로세스이므로, 탭을 닫는 것은 깨끗한 환경을 다시 구축하는 것과 같지 않습니다.

외부 효과도 목록화하세요: 다운로드, 패키지 설치, 디렉터리 변경, 이미 생성된 파일 읽기, 환경 변수 사용 등입니다. 결과가 즉시 나온 것처럼 보이는 셀은 단순히 오래된 파일을 재사용한 것일 수 있습니다. 앞으로 작성할 스크립트는 의도한 입력과 시험의 잔재를 구분할 수 있어야 합니다.

2. 코드를 옮기기 전에 계약을 작성하세요

추출할 작업을 하나만 선택하세요. 예를 들어 점수가 담긴 파일을 읽고, 점수가 임계값에 도달한 식별자를 유지하고, 결과를 쓰는 것입니다. 이 가이드의 예시는 교육용이며 실행되지 않고 GPU도 사용하지 않습니다. 이는 실행의 의존성을 보여주기 위한 것이지, 측정값이나 Kernodeck과 함께 제공되는 도구를 알리기 위한 것이 아닙니다.

변환을 검증할 수 있을 만큼 충분히 정확하게 입력, 파라미터, 출력을 정의하세요. 여기서 임계값은 포함 조건입니다: 0.5인 점수도 유지됩니다. 식별자는 점수와 연결된 상태로 유지되어야 하며 입력 순서는 보존됩니다. 기존 출력이 새로운 시험으로 인해 의도치 않게 대체되어서는 안 됩니다.

이 단계는 모호한 마이그레이션을 방지합니다: 노트북이 임계값과 같은 점수를 제거했는데 스크립트가 이를 유지한다면, 계산을 바꾼 것입니다. 이것이 수정인지 회귀인지 명확히 결정하세요. 멀리 떨어진 두 값만이 아니라 정확히 경계에 위치한 사례도 유지하세요.

표의 모든 열을 보려면 스크롤하세요.
실행을 주장하지 않는 교육용 선택 계약.
항목예시 값기준
입력a: 0.4, b: 0.8, c: 0.5서로 구별되는 세 개의 식별자, 0과 1 사이로 이미 검증된 점수.
파라미터임계값 0.5크거나 같음 비교.
기대 출력b, 그다음 c중복이나 재정렬 없는 두 개의 식별자.

3. 더 이상 셀에 의존하지 않는 함수 추출

변환을 읽기 및 쓰기 작업과 분리하세요. 계산 함수는 데이터와 임계값을 받고 선택된 식별자를 반환합니다. 이 함수는 seuil이라는 전역 변수를 조회하지 않고, 파일을 암묵적으로 열지 않으며, 입력 목록을 수정하지 않습니다. 이를 통해 노트북과 스크립트가 정확히 동일한 계산을 호출할 수 있습니다.

예제에서 데이터는 앞의 계약에 따라 이미 검증된 것으로 가정합니다. 따라서 이 함수는 완전한 파일 검증기가 아닙니다. 이 한계는 의도적입니다: 프로그램 입력에서 형식을 확인한 다음, 변환은 이해하기 쉽게 유지하세요. 파라미터를 추가할 때 값을 변경했던 셀을 다시 찾을 필요가 없어야 합니다.

노트북은 탐색 도구로 남아 있어도 됩니다. 두 번째 사본을 유지하는 대신 노트북이 이 함수를 가져오게 하세요. 모듈을 수정한 후에는 두 경로를 비교하기 위해 새 커널에서 시작하세요. 이미 가져온 이전 함수가 검증을 왜곡해서는 안 됩니다.

교육용 함수 — 자신의 모듈에 배치할 것, 여기서는 실행되지 않음
def retenir_identifiants(records, seuil):
    return [
        record["id"]
        for record in records
        if record["score"] >= seuil
    ]


if __name__ == "__main__":
    records = [
        {"id": "a", "score": 0.4},
        {"id": "b", "score": 0.8},
        {"id": "c", "score": 0.5},
    ]
    attendu = ["b", "c"]
    obtenu = retenir_identifiants(records, 0.5)
    if obtenu != attendu:
        raise SystemExit("Sélection inattendue")

4. 파라미터를 가시적인 입력으로 만들기

스크립트의 진입점은 인수를 처리하고, 선택을 검증하고, 함수를 호출합니다. 표준 모듈 argparse는 옵션을 설명하고 도움말을 생성하지만, 비즈니스 규칙을 알지 못합니다. 구문상 허용되는 부동소수점이 허용 범위를 벗어날 수도 있습니다. 따라서 이 예시의 임계값은 추가 검증이 필요합니다.

경로 해석 방식을 명확히 하세요. 명령을 실행한 디렉터리를 기준으로 할지, 명시적으로 선택한 프로젝트 폴더를 기준으로 할지 정해야 합니다. 계산 중간에 숨겨진 디렉터리 변경을 사용하지 마세요. 아래 블록은 인자 분석만 보여 줍니다. 데이터 읽기와 쓰기는 리더 프로그램에 연결해야 합니다.

비밀 정보는 이 인자들에서 빼 두세요. 공유 가능한 매개변수는 실험을 설명하고, 저장소나 스토리지 접근은 다른 경로를 따릅니다. 동료에게 유용한 명령은 토큰까지 함께 복사하지 않고도 복사할 수 있어야 합니다.

교육용 인자 분석 — 실행되지 않은 발췌
import argparse
from pathlib import Path


def lire_arguments():
    parser = argparse.ArgumentParser()
    parser.add_argument("--input", required=True, type=Path)
    parser.add_argument("--output", required=True, type=Path)
    parser.add_argument("--seuil", required=True, type=float)
    args = parser.parse_args()
    if not 0 <= args.seuil <= 1:
        parser.error("임계값은 0과 1 사이여야 합니다.")
    return args

5. 스크립트에 종료 지점과 검증 가능한 출력 부여

오케스트레이션은 main 함수에 두고 if __name__ == "__main__" 조건에서 실행하세요. 그러면 노트북에서 모듈을 임포트해도 처리가 즉시 실행되지 않습니다. 임포트는 도구를 정의하고, 주 진입점은 언제 읽고 계산하고 쓸지 결정합니다.

실행마다 별도의 폴더를 지정하세요. 실제로 사용한 비민감 매개변수와 입력의 식별자를 기록한 다음 결과를 작성하세요. 우리 선택의 경우 식별자 개수, 입력에 포함되는지 여부, 임계값 규칙을 확인하세요. 올바른 형식의 JSON 파일이라도 잘못된 식별자를 담을 수 있습니다. 파일의 존재만으로는 충분하지 않습니다.

입력 파일이 없거나 대상 위치를 사용할 수 없으면 명시적으로 실패하도록 하세요. 이런 문제를 빈 목록으로 대체하지 마세요. 빈 목록은 유효한 선택으로 해석될 수 있습니다. 프로그램은 임계값을 충족하는 결과가 없는 경우와 읽기 실패로 결과가 없는 경우를 구분해야 합니다.

6. 새로 시작한 두 실행에서 비교

먼저 세 개의 교육용 줄을 사용하세요. 임계값 0.5에서는 b와 c를, 0.9에서는 빈 목록을, 0.4에서는 세 개의 식별자를 기대합니다. 이 답은 계약에서 도출되며 여기서 실행된 결과로 제시되는 것이 아닙니다. 이로써 반전된 비교 연산자나 잘못된 순서를 찾아낼 수 있습니다.

그다음 재시작한 노트북과 스크립트를 동일한 입력에 대해 새 프로세스에서 실행하세요. 스크린샷이나 파일에 적힌 시각이 아니라 유용한 값을 비교하세요. 대표적인 두 번째 데이터 세트와 유효하지 않은 입력도 추가하세요. 출력을 더 간결하게 표현하는 것과 같은 예상 차이를 문서화하세요.

nbconvert 변환은 셀을 처음 옮길 때 속도를 높일 수 있지만, 매직 명령은 여전히 Jupyter에 의존할 수 있습니다. 노트북 전용 명령, 불필요한 출력, 즉석 설치를 제거하거나 바꾸세요. 내보내기는 출발점일 뿐이며, 새 상태에서의 비교가 마이그레이션 완료 여부를 결정합니다.

7. 숨은 상태를 다시 들이지 않고 GPU로 전환

CPU 경로를 이해한 뒤에는 모델 로딩과 백엔드를 같은 명시적 구조에 연결하세요. 버전, 정밀도, 입력, 대상을 유지하세요. GPU 전환은 일관성 없는 셀 순서나 이전 시도의 파일로 생긴 문제를 고치지 못합니다. PyTorch가 선택한 장치에서 실제로 계산할 수 있는지 별도로 확인하세요.

두 번의 실행이 서로 다른 값을 내면 잊힌 상태, 무작위 소스, 계산의 수치적 한계를 구분하세요. 시드는 버전과 하드웨어에 걸친 보편적인 동일성 보장이 아닙니다. 중단된 학습에는 체크포인트 전용 절차를 사용하세요. 이 가이드는 진입점을 바꿀 뿐, 옵티마이저나 생성기의 상태를 재구성하지 않습니다.

유용한 결과물은 하나의 명령으로 설명할 수 있는 프로그램이며, 그에 필요한 사전 요구사항과 결과 검증 방법을 포함합니다. 노트북은 탐색하고 시각화하는 데 자유롭게 사용할 수 있지만, 이제 연산을 어떻게 실행해야 하는지에 대한 기억을 노트북 혼자서 담당하지는 않습니다.

자주 묻는 질문

프로젝트를 재현 가능하게 만들려면 노트북을 버려야 하나요?

아니요. 노트북은 탐색과 발표 용도로 유지하되, 재사용되는 연산은 스크립트에서도 호출되는 함수나 모듈에 넣으세요. 검증은 새 커널과 명시적인 입력에서 다시 시작해야 합니다.

노트북을 .py로 내보내면 충분한가요?

아니요. 내보내기는 보이는 코드를 옮길 뿐, 의존성 순서나 이미 실행된 셀의 효과를 바로잡지 못합니다. 매직 명령이 여전히 Jupyter를 필요로 할 수도 있습니다. 새 프로세스에서 스크립트를 검증하세요.

바이트 단위로 동일한 파일을 얻어야 하나요?

그 기준이 해당 포맷에 적절한 경우에만 그렇습니다. 먼저 기대되는 식별자, 값, 비즈니스 규칙을 비교하세요. 날짜나 메타데이터는 연산을 바꾸지 않고 달라질 수 있으며, 수치 허용 오차는 명시적이어야 합니다.