프로그램 저장하고 다시 불러오기
프로그램 저장하고 다시 불러오기 (Saving a program and reloading it)
최적화한 프로그램을 저장하면 언제든 다시 불러올 수 있어요. 이번 강의에서는 .save() 의 두 가지 모드와, 다시 불러오는 방법을 살펴볼게요.
출처: 문서
본문
최적화된 상태만 저장하기, 아니면 프로그램 전체를 저장하기
.save(path) 에는 두 가지 모드가 있어요. .json 파일을 가리키면 프로그램이 학습한 상태(state) — 즉 최적화된 지시문과 few-shot 데모 — 만 저장하고 프로그램의 구조는 저장하지 않습니다. save_program=True 와 함께 디렉터리를 가리키면 모듈 전체를 피클(pickled)된 아티팩트로, 구조와 상태를 함께 씁니다.
상태 전용 모드가 보통 원하는 것이에요. JSON은 작고, 사람이 읽을 수 있고, 공유해도 안전하며, 버전 관리에서 diff를 내기 쉽습니다. 다시 불러오려면 코드에서 평소처럼 프로그램을 인스턴스화하고 .load() 를 호출해 저장된 상태를 위에 적용하면 돼요.
save_program=True 는 프로그램을 불러올 사람이 당신의 Python 클래스 정의를 갖고 있지 않을 때 사용하세요. 최적화된 프로그램을 다른 팀에 배포하는 것이 한 예이고, 개발한 저장소와 다른 저장소에서 서빙하는 것도 또 다른 예입니다. 단점은 저장된 디렉터리 안에 실행 가능한 Python이 들어 있어 신뢰하는 출처의 프로그램만 불러와야 한다는 점이에요.
# state-only — small file, requires re-instantiating the program before loading
optimized_haiku_bot.save("haiku_bot.json")
# whole program — directory, rehydrates without you re-defining the class
optimized_haiku_bot.save("haiku_bot/", save_program=True)
저장된 프로그램 다시 불러오기
디렉터리 형태는 dspy.load(path) 가 한 번의 호출로 전체 모듈을 재수화(rehydrate)합니다. 상태 전용 형태는 코드에서 프로그램의 새 복사본을 만든 뒤 그 위에 .load(path) 를 호출해 저장된 상태를 적용합니다.
# whole program
loaded = dspy.load("haiku_bot/")
# state-only
fresh = dspy.ReAct(HaikuBot, tools=[wikipedia_search, get_wikipedia_page])
fresh.load("haiku_bot.json")
저장 파일에는 최적화된 지시문, 데모, 시그니처 메타데이터가 들어 있어요. LM 클라이언트 설정은 포함되지 않습니다. — API 키, 공급자 선택, temperature 같은 것들 말이죠. 그 분리는 의도적입니다. 불러온 뒤 평소처럼 LM을 구성하면, 같은 프로그램이 오늘 당신이 가리키는 어떤 모델이든 타깃으로 삼습니다.
저장된 프로그램의 버전 관리, 같은 체크포인트에 모델을 맞바꿔 끼우기, 데모 수명주기 관리 등은 저장과 불러오기 (심층)를 참고하세요.
다음: 다음은 어디로 가나요? →