2022. 5. 13. 14:02ㆍAI 기술
현재 상용화 된 Federated Learning Framework 들이 몇몇 존재한다.
실제로 업무를 하면서 3가지 정도를 다뤄봤고, 그중 Flower Framework를 기준으로 설명하고자 한다.
내가 생각하는 Federated Framework 절대적으로 동작해야되는 기능을 포함하는 Framework만 선별했다.
- Real Network Operation
하나의 환경안에서만 동작하는 Federated Learning은 깃헙에도 custom코드가 널리고 널렸다. Server와 Client 환경을 구분하지 않는 Framework는 바로 out 시켰다. - Security
weight를 주고 받을 때, 동형화 암호를 사용하여 주고 받게 되어있는데, 해당 기능을 개발중이거나 사용하지 않는 Framework는 사실 Federated Learning의 존재 가치가 없다고 생각하여 out 시켰다.
1. Nvidia Clara
official github : https://github.com/NVIDIA/clara-train-examples
여러가지 FL tool을 써본 결과 가장 기능이 많고 유저 친화적인 툴이라고 생각한다. 다만 model이나 설정하는 부분들이 한정적이여서 GAN을 도입하지 못했고, real network enviornment에서 구현에 실패하였다. (ip address를 무조건 domain name으로 설정하라는게 참...)
쉬운 task (classification, segmentation)들을 해보려면 user guideline을 따라서 천천히 해보는 걸 추천한다.
환경 세팅은 어렵지 않다! 무조건 도커이미지를 이용한 컨테이너 안에서만 실행이 가능하는 점도 참고하길 바란다.
2. Pysyft Duet
official github : https://github.com/OpenMined/PySyft
가장 삽질을 많이한 프레임워크 PySyft이다. Clara와 마찬가지로 설명이 꼼꼼히 잘 되있고, real world에서 동작한다는 장점을 가지고 있다. 구글링을 하면 PySyft로 구현된 Federated Learning example이 많이 나온다. 그런데 사용하시려는 분들을 꼭 아셔야되는게 검색결과의 99%가 Pysyft 0.2.x version으로 코드가 구현되어 있다. 현재(22/05/13)기준 0.7.0 버전까지 나온상태인데 아직도 구버전 코드들만 수두룩해서 프레임워크 사용법을 Document만을 보고 익혀야 한다. 심지어 최신버전에 대한 문서도 너무 불친절하다... 그래서 겨우 찾은 방법이 Duet이다!
PySyft 깃헙 내에서 Duet branch로 들어가보면 쉽게 따라할 수 있는 notebook code가 존재한다. 코드도 직관적이고 사용하기 편하게 짜여져있다.
하지만! 가장 큰 문제가 존재한다. 실험했을 당시(version 0.5.0) Server와 client가 수시로 끊기는 현상이 발생했다. 1시간마다 네트워크 연결이 끊겨 도저히 테스트를 진행 할 수 없는 상황이 지속되어 Framework를 포기했어야 했다.
3. Flower
official github : https://github.com/adap/flower
official document : https://flower.dev/docs/
현 프로젝트에 성공적으로 이식 성공한 프레임워크!
단 한가지의 단점만 빼면 내가 느끼기엔 완벽하게 연합학습을 지원하는 프레임워크라고 생각한다.
불친절한 깃헙(Slack Community를 통한 질문가능)을 제외하면 흠 잡을 곳이 없다.
* 코드는 완성되었지만, 업무상 Private로 설정해 놨습니다. 혹시 궁금한 점이 있으면 댓글이나 메일로 문의주시면 슈더코드나 알고리즘은 공유가 가능합니다!
결론
Flower Framework를 이용한
1. Classification
2. segmentation
3. DCGAN
4. StyleGAN
5. StyleGAN2-ada
구현에 성공하였으며, real network에서 돌아가는 것까지 확인 되었습니다.
성능은 아직 측정중에 있으므로, 만약 유의미한 결과가 나오면 공식 레포로 돌릴 예정입니다.
'AI 기술' 카테고리의 다른 글
mmsegmentation 공략하기(설치부터 custom dataset학습까지) (0) | 2023.06.07 |
---|---|
내가 필요해서 정리하는 JAX(2)(JAX의 설치 / 직접 설치해보고 적는 방법) (2) | 2023.04.24 |
내가 필요해서 정리하는 JAX(1)(JAX의 기초부터 XLA까지) (0) | 2023.04.18 |
[Linux] 특정 디렉토리의 Tree 구조만 복사하기 (0) | 2022.11.17 |
[Federated Learning] + Blockchain과의 연계 (1) | 2022.03.23 |