가장 좋은 재현성 도구는 다음과 같은 작업을 기록하는 것입니다.
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
이것은 종이에 기록 할 수 있지만 실험이 계산 프레임 워크에 적합하면 계산 도구를 사용하여 해당 로깅 프로세스를 부분적으로 또는 완전히 자동화 할 수 있습니다 (특히 거대한 입력 데이터 세트 및 출력을 추적하는 데 도움이 됨) 그림).
학습 곡선이 낮은 Python의 뛰어난 재현성 도구는 물론 IPython / Jupyter Notebook입니다 ( % logon 및 % logstart 마술을 잊지 마십시오 ). 팁 : 노트북을 재현 할 수있게하려면 커널을 다시 시작하고 모든 셀을 위에서 아래로 실행하십시오 (버튼은 모든 셀 실행). 작동하는 경우 모든 것을 보관 파일 ( "고정")에 저장하십시오. 오류를 피하기 위해 비선형적이고 비 순차적이며 명백하지 않은 방식 으로 셀을 실행해야하는 경우 약간의 재 작업이 필요합니다.
매우 최근의 (2015) 또 다른 훌륭한 도구는 recipy 이며 수마트라와 매우 비슷하지만 Python 용으로 특별히 만들어졌습니다. Jupyter Notebook과 호환되는지 잘 모르겠지만 저자가 자주 사용하는 노트북을 알고 있으므로 현재 지원되지 않는 경우 향후에있을 것으로 생각합니다.
힘내 도 훌륭하고 파이썬과 관련이 없습니다. 모든 실험, 코드, 데이터 세트, 그림 등의 이력을 유지하는 데 도움이 될뿐만 아니라 과학을 사용하여 유지 관리 ( git pickaxe ), 공동 작업 ( 탓 ) 및 디버그 ( git - bisect ) 도구를 제공합니다. 디버깅 방법 ( 델타 디버깅 이라고 함 ). 다음 은 Git의 팩시밀리가 될 때까지 자신의 실험 로깅 시스템을 만들려는 가상의 연구원 의 이야기 입니다.
(에 파이썬 API를 모든 언어로 작업하는 또 다른 일반적인 도구 pypi은 )는 수마트라 특히 당신이 할 수 있도록 설계되었습니다, 복제 연구 ( 복제 반면, 동일한 코드와 소프트웨어 주어진 동일한 결과를 생성하는 목표를 재현성이 을 생산하는 것을 목표로 매체가 주어지면 동일한 결과를 얻습니다.
Sumatra의 작동 방식은 다음과 같습니다. Sumatra를 통해 수행하는 각 실험마다이 소프트웨어는 비디오 게임에서 흔히 볼 수있는 "게임 상태 저장"처럼 작동합니다. 보다 정확하게는 다음을 저장합니다.
- 제공 한 모든 매개 변수;
- 전체 실험 응용 프로그램 및 구성 파일의 정확한 소스 코드 상태
- 출력 / 플롯 / 결과 및 실험 응용 프로그램에서 생성 한 파일
그런 다음 각 실험에 대한 타임 스탬프 및 기타 메타 데이터가 포함 된 데이터베이스를 구성하여 나중에 webGUI를 사용하여 크롤링 할 수 있습니다. Sumatra는 특정 시점에 특정 실험을 위해 애플리케이션의 전체 상태를 저장 했으므로 원하는 순간에 특정 결과를 생성 한 코드를 복원 할 수 있으므로 저렴한 비용으로 복제 가능한 연구를 수행 할 수 있습니다. 거대한 데이터 세트에서 작업하지만 매번 모든 것을 저장하지 않으려면 예외를 구성 할 수 있습니다).
또 다른 멋진 도구로는 그놈의 Zeitgeist (이전에는 Python으로 코딩되었지만 현재 Vala로 포팅 됨)가 있습니다. 모든 작업을 기록하고 모든 것을 기록하고 머신 러닝을 사용하여 항목 간의 관계를 원하는 기간 동안 요약 할 수 있습니다 유사성과 사용 패턴 (예 : "작년 한 달 동안 프로젝트 X에서 작업하는 동안 나에게 가장 중요한 것은 무엇입니까?") 과 같은 질문에 대답 . 흥미롭게도 Evernote와 유사한 메모 작성 앱인 Zim Desktop Wiki 에는 Zeitgeist와 연동되는 플러그인이 있습니다.
결국 Git 또는 Sumatra 또는 원하는 다른 소프트웨어를 사용할 수 있습니다. 동일한 복제 능력을 제공하지만 Sumatra는 과학 연구에 맞게 특별히 설계되어 있으므로 크롤링하는 웹 GUI와 같은 몇 가지 멋진 도구를 제공합니다 Git은 코드 유지 관리에 더 적합하지만 결과에는 git-bisect와 같은 디버깅 도구가 있으므로 실험에 코드가 포함되어 있으면 실제로 더 나을 수 있습니다. 또는 둘 다 사용할 수 있습니다!
/ EDIT : 여기서 dsign 은 매우 중요한 점을 지적했습니다. 설정의 복제 가능성은 응용 프로그램의 복제 가능성만큼 중요합니다. 다시 말해, 최소한 사용 했던 라이브러리와 컴파일러 의 전체 목록 과 정확한 버전 및 플랫폼 세부 정보를 제공해야 합니다 .
개인적으로 Python을 사용한 과학 컴퓨팅에서 라이브러리와 함께 응용 프로그램을 패키징하는 것이 너무 고통 스럽다는 것을 알게되었습니다. 따라서 Anaconda 와 같은 올인원 과학 파이썬 패키지 (대단한 패키지 관리자 conda )를 사용합니다. 사용자에게 동일한 패키지를 사용하도록 조언하십시오. 또 다른 해결책은 virtualenv 를 자동으로 생성하는 스크립트를 제공 하거나 dsign 또는 오픈 소스 Vagrant (예 : Vagrant를 사용하여 쉽게 재배포 할 수있는 pylearn2-in-a-box)에서 인용 한대로 상용 Docker 응용 프로그램을 사용하여 모든 것을 패키징 하는 스크립트를 제공 할 수 있습니다 가상 환경 패키지).
마지막으로, 필요할 때마다 완벽한 작업 환경을 보장하기 위해 가상 머신을 만들고 (VirtualBox 참조) 실험을 실행할 준비가 된 머신의 상태 (스냅 샷)를 저장할 수도 있습니다. 그런 다음이 가상 머신을 포함 된 모든 항목과 공유하면 누구나 정확한 설정으로 실험을 복제 할 수 있습니다. 이것은 아마도 소프트웨어 기반 실험을 복제하는 가장 좋은 방법 일 것입니다. 컨테이너는보다 가벼운 대안이지만 전체 환경을 포함하지 않으므로 복제 충실도가 떨어집니다.
/ EDIT2 : 다음 은 재현 가능한 연구를 수행하는 데있어 근본적인 것 (디버깅 용이지만 연구에도 적용 할 수 있음)을 요약 한 훌륭한 비디오입니다 . 실험 및 과학적 방법의 각 단계, "명시 적 실험" 로깅 .