[생성AI서비스팀 김경환]
현시대의 개발에서는 “오픈소스 문화”를 떼어 놓고 이야기하는 것이 불가능합니다. 특히 인공지능 분야에서는 Pytorch와 같은 딥러닝 프레임워크에서부터 심지어는 사전 학습 모델까지도 공개하고 기여하는 것이 추세입니다.
내가 업무에 사용하는 오픈소스 라이브러리에 버그를 발견했다면 어떻게 대응해야할까요? 패치가 될 때까지 기다리는 방법도 있겠지만 직접 기여해보는 것도 좋은 경험이 될 것입니다. 이번 포스트에서는 오픈소스 라이브러리의 버그를 수정한 경험을 공유해보려합니다.
이슈 등록하기
Stable Diffusion 기반의 이미지 생성 작업을 개발할 때 사용하는 오픈소스 라이브러리로 Hugging Face의 Diffusers라는 라이브러리가 있습니다.
저는 업무에서 Diffusers 라이브러리를 사용하던 도중 한가지 버그를 발견했습니다.
AttributeError: 'StableDiffusionImg2ImgPipeline' object has no attribute 'enable_vae_tiling'
StableDiffusionImg2ImgPipeline 클래스에 enable_vae_tiling 함수가 없다고 에러가 나왔습니다. 그런데, 저는 이 에러가 버그라고 생각했습니다. 그 이유는 유사한 구조의 클래스인 StableDiffusionXLImg2ImgPipeline에는 이 함수가 구현이 되어 있었기 때문입니다. 버그를 인지하고, 이 문제에 대해서 이야기를 나누기 위해 Diffusers GitHubon 이슈를 등록하였습니다.
이슈를 올릴 때는 다음과 같이 올렸습니다.
- 현상에 대해 상세히 설명하기
- 버그 재현 방법 설명하기
- 버그 발생시의 로그도 공유하기
버그를 이슈에 올려 공유하니 Diffusers의 컨트리뷰터에게서 답글이 달렸습니다.
직접 수정해서 PRPull Request을 올려달라는 요청이었습니다. 코드를 확인해보았을 때 기존에 있던 코드를 재활용해서 수정하면 될 것 같아 PR을 직접 올려보기로 했습니다.
Pull Request 올리기
PR을 올리는 과정은 다음과 같습니다.
- Diffusers 레포를 자신의 레포로 Fork 합니다.
- 수정할 부분을 고치고, 코드를 Commit 합니다.
- GitHub의 Pull Request 기능을 이용해 Diffusers의 main branch에 Pull Request를 보냅니다.
위 순서로 코드를 수정하고 PR을 보냈습니다. PR은 아래와 같이 올렸습니다.
그리고 제가 수정한 코드가 제대로 동작하는지 확인할 수 있도록 테스트 방법과 테스트 결과도 함께 공유해주었습니다.
이 PR에서 몇몇의 컨트리뷰터가 추가적인 의견을 나눈 끝에 제가 수정한 코드를 Merge 하게 되었습니다!
이 코드가 수정된 덕분에 제가 실제로 작업 중인 프로젝트에도 해당 기능을 쉽게 반영할 수 있게 되었습니다.
마치며,
오픈소스는 누군가가 구현해둔 기능을 쉽게 활용해볼 수 있다는 점에서 굉장히 유용하지만, 소프트웨어와 오픈소스라는 특성상 종종 문제를 발견할 수 있습니다. 오픈소스에 직접 기여하여 내가 사용하는 오픈소스의 완성도를 높히고 같이 발전시키는 경험을 해보면 개발자로써 성장할 수 있는 좋은 경험이 되고, 또한 실제로 현업에서 작업중인 프로젝트의 완성도도 함께 올라갈 것입니다.
Reference
- https://huggingface.co/docs/diffusers/en/index
- https://github.com/huggingface/diffusers/issues/6870
- https://github.com/huggingface/diffusers/pull/6871
- https://docs.github.com/ko/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request