TransCoder
프로젝트 선정 이유
facebook research에서 만든 TransCoder를 재가공. python 언어를 java, c++로 java 언어를 python, c++로 그리고 c++언어를 python, java언어로 변환하는 ML project. 아무래도 개발자들이 ainize 플랫폼을 이용할 것이기 때문에 개발자의 흥미를 끌 것이라고 생각하여 프로젝트 선정.
진행과정
1) 최근에 올라온 오픈소스 프로젝트였기에 원본 repo의 코드들이 완벽하지 않았음 이를 local 환경에서 테스트를 통해서 에러가 나는 코드를 찾아내고 이를 수정.
2) 수정한 코드를 개발한 서버와 호환되어서 잘 돌아가게끔 수정하는데 시일이 꽤 걸렸으나 model preload와 함께 사용자들이 동시에 요청을 보낼때를 상정하여서 queue를 이용하여 multi-threading를 구현.
3) 서버가 어느정도의 견고함을 가졌는지 테스트하기 위해서 locust test를 실행하여 일정 기준을 통과한 후에야 프로젝트를 deploy.
깨달은 점 및 느낀점(모든 깨달은 점은 개인 notion에다가 정리)
- stateless한 server의 중요성을 깨달음
- multi threading의 개념을 숙지.
- github에 빈 폴더를 push하면 github에는 반영이 안됌
프로젝트 링크 및 원본 github 링크
github link : https://github.com/kmkwon94/TransCoder
original github link : https://github.com/facebookresearch/TransCoder
web demo link : https://master-trans-coder-kmkwon94.endpoint.ainize.ai/
Ganilla
프로젝트 선정 이유
풍경 사진을 input으로 넘겨주면 유명한 일러스트레이터의 화풍으로 그려진 이미지로 output을 뽑아내는 ML. 일단 User들이 재밌어 할만한 project여서가 최우선 선정이유, 두 번째 선정이유로는 이미지 관련 ML이였기 때문에 확실한 결과를 보여줄 수 있었기 때문.
진행과정
1) Docker를 이용하여 서버를 구성 및 필요 dependency 해결.
2) 이 과제에서는 결과물을 보여줄때 사용자에게 두 개의 사진을 보내줘야했는데 그 처리방식을 몰라서 고생을 했었음. 이를 결국에서는 javascript에서 Django 문법이 통용되는 것을 이용하여서 해결.
3) server에 모델을 pre-load하여 user의 요청 후 응답 시간을 절반 가까이 단축시키는데 성공. 이후 모든 프로젝트에 적용
4) docker container 안에서 서버를 열었는데 이를 test하기 위해선 클라이언트가 docker 안에서 확인할 수 없었기 때문에 ngrok를 이용해서 local 브라우저를 통해 web demo를 테스트하였음. 이 과정 또한 모든 프로젝트에 적용하여 진행
5) 다른 인턴들과 senior 개발자님에게 code review를 받고 dockehub에 push 및 ainize.ai에 업로드
깨달은 점 및 느낀점(모든 깨달은 점은 개인 notion에다가 정리)
- ngrok의 사용법 및 편리성
- python flask에서 이미지를 동적으로 넘기는 방법
- file을 byte로 변환하여 메모리에 올려서 input file과 output file을 지울 수 있게 하는 법
- 견고한 서버에는 클라이언트로 부터 받은 모든 정보들을 서버에 파일 형태로 남겨두지 않는 것이 좋다!
프로젝트 링크 및 원본 github 링크
github link : https://github.com/kmkwon94/ganilla-gpu
original github link : https://github.com/giddyyupp/ganilla
web demo link : https://master-ganilla-gpu-kmkwon94.endpoint.ainize.ai
Council-GAN
프로젝트 선정 이유
male 사진을 female로, person 사진을 anime 이미지로, 안경 쓴 사람을 안경 벗은 사람 이미지로 바꾸어주는 ML project. U-GOT-IT 이라는 ML 오픈소스프로젝트가 한 때 인기였었는데 이 프로젝트도 비슷한 프로젝트여서 많은 user들에게 Attractive하다고 생각하였음.
진행과정
1) 이번 하계인턴부터는 gpu를 본격적으로 사용할 수 있었기 때문에 더욱 많은 ML 논문들을 프로젝트에 도입할 수 있었음. 그러나 GPU 사용은 CPU 사용할 때와 달리 스레딩에서 차이가 있었기 때문에 이를 해결하기 위한 노력이 필요했음
2) 임의의 queue를 만들어서 threading처럼 돌아가게끔 서버구현
3) locust test 및 code review
4) project Deploy
깨달은 점 및 느낀점(모든 깨달은 점은 개인 notion에다가 정리)
- 원본 프로젝트에 PR을 날려서 처음으로 merge를 성공했었던 프로젝트
- 오픈소스의 기여에 즐거움을 느꼈음
- CORS 문제 해결법
프로젝트 링크 및 원본 github 링크
github link : https://github.com/kmkwon94/Council-GAN
original github link : https://github.com/Onr/Council-GAN
web demo link : https://master-council-gan-kmkwon94.endpoint.ainize.ai/
모든 프로젝트의 Basic process
1) papers with code 혹은 github에서 사용자들이 재미있어할 만한 최신 ML 관련 논문들을 찾는다.
2) Docker 컨테이너를 서버로 이용.
3) Dockerfile을 작성하여 dependency를 해결
4) ML 관련 논문들을 직접 실행해볼 수 있게끔 sever.py 를 작성하고 web Demo를 개발
5) stateless한 sever를 구축하기 위해서 model preload, User queue 제한 등등 모듈을 개발하고 locust test를 통하여 sever의 견고함을 측정
6) 팀원들과 senior 개발자에게 code review후 dockerhub에 push
7) 회사 쿠버네티스에서 docker pull을 하여 서버 개시
더보기