본문 바로가기
예바의 LAB

[프로젝트] Samsung AI Challenge: MLFF Fields 2024

by 예바두비두밥바 2024. 9. 18.

Samsung AI Challenge: Machine Learning Force Fields 2024 회고록 

(2024.08.05 ~ 2024.09.13)

Dream 챌린지에 이어 바로 시작하게 된 Samsung AI Challenge: Machine Learning Force Fields이다. 이 챌린지에서 요구하는 Task는 입력된 원자 구조로부터 시스템의 에너지 및 힘을 예측하면서 예측값에 대한 uncertainty를 모두 출력하는 것이다. 우리에게 원자 구조에 대한 정보를 xyz 파일 포맷으로 주어졌으며 모델을 처음부터 설계하기보다는 기존의 MLFF 모델을 변형하는 방향으로 챌린지를 진행하였다. 


프로젝트 내의 역할

#1. MLFF(Machine Learning Force Fields) 모델과 데이터셋에 대한 이해

이 챌린지를 시작하기 전까지만 해도 MLFF가 무엇인지 아무것도 모르는 상태였다. 대회 안내에 나와있는 내용만으로는 MLFF를 이해하기에는 부족했고 모델을 설계하는 것보다 이 분야에 대해 이해하는데에 더 많은 시간을 쏟았던 것 같다. MLFF에 대한 자료가 많이 있지도 않아서 주로 논문을 보면서 MLFF 분야에 대해 이해를 하였다. 3주 간 얻은 얕은 지식이지만, 이 분야를 처음 접한 사람들에게 조금이라도 이해를 도우고자 아래의 포스팅을 작성하였다.

 

MLFF(Machine Learning Force Fields)의 개념과 모델

MLFF(Machine Learning Force Fields)의 개념과 모델1. MLFF(Machine Learning Force Fields) 배경분자 동역학은 Force Fields에 기반해 원자의 위치, 힘 등을 활용하여 원자 및 분자의 구조 및 상호작용의 변화 등 동

yebaaaaa.tistory.com

 

또한, SAIT에서 낸 NeurIPS의 "Benchmark of Machine Learning Force Fields for Semiconductor Simulations : Datasets, Metrics, and Comparative Analysis"라는 논문을 읽고 정리하여 랩미팅에서 발표를 진행하였다. 이 논문은 MLFF 모델을 다루기 보다는 MLFF 모델을 어떻게 평가하는지에 대한 내용이다. 이 논문에서는 크게 Energy & Force와 Simulation Indicators로 2가지 기준으로 평가하는 방식을 제안한다. 기존의 Benchmark는 Energy & Force 위주로 모델을 평가하는 반면에 해당 논문이 제시한 Benchmark는 Simulation Indicators를 추가하여 반도체 시뮬레이션에 더 적합하게 모델을 평가한다. 이 대회를 주관하는 Samsung에서 낸 논문이라 Energy & Force 평가 방식에 대한 이해와 전반적인 MLFF 모델의 종류와 성능을 비교해서 알 수 있었다. 아래의 링크는 그 당시 논문을 읽고 정리한 발표 자료이다.

 

[논문 발표] Benchmark of Machine Learning Force Fields for Semiconductor Simulations: Datasets, Metrics, and Comparative Ana

2024.08.09논문 "Benchmark of Machine Learning Force Fields for Semiconductor Simulations : Datasets, Metrics, and Comparative Analysis"을 읽고 랩미팅 시간에 발표한 자료입니다.

yebaaaaa.tistory.com

 

 

#3. MLFF 모델 코드 분석

 

MLFF-Framework/scripts at main · SAITPublic/MLFF-Framework

This repository is a package to provide SAIT Machine Learning Force Field(MLFF) Framework - SAITPublic/MLFF-Framework

github.com

MLFF 모델에 대한 기본적인 지식이 없는 상황에서 1달이라는 짧은 기간 동안 MLFF 모델을 처음부터 끝까지 설계하기에는 무리가 있다고 판단하여 베이스가 될 코드를 찾았다. 앞서 읽은 논문의 Github에 여러 MLFF 모델에 대해 실행할 수 있도록 정리해놓아서 위의 코드를 바탕으로 코드를 분석하였다. 논문을 읽고 해당 코드를 이렇게 자세히 뜯어본 적은 처음이었다. 

Readme와 sh 파일

코드를 뜯어보기 앞서 작성된 코드를 실행해봤는데, 이때 Readme와 sh 파일이 모두 코드 작성자가 아닌 사용자를 위해 만들어진 것임을 느꼈다. Readme와 sh 파일이 정말로 자세히 작성된 덕분에 코드를 실행하는 것에는 큰 어려움 없었다. 먼저, Readme는 일종의 설명서로 해당 파일이 어떤 내용을 담고 있는지, 실행은 어떻게 하는지 등의 내용으로 사용자로 하게끔 해당 코드의 역할을 알 수 있게끔 한다. 다음으로, sh 파일은 코드 사용자가 쉽게 코드를 실행할 수 있게끔 만든 일종의 버튼 역할을 하는 것 같다. 코드를 처음 본 사용자 입장에서 해당 코드를 실행하려면 어떻게 해야할 지 감이 잘 안온다. 하지만, sh 파일로 명령어를 정리해놓는다면 어떤 파일에서 어떻게 실행할지 모르더라도 sh 파일만으로도 쉽게 실행이 가능하다. 

코드 실행 과정

해당 논문의 코드는 여러 MLFF 모델을 포함한 코드였기에 파일도 엄청 많았고 복잡했다. 하나의 train을 돌릴 때에도 함수 호출 및 객체 생성 등으로 너무나도 많은 파일을 거쳐야 했기에 힘들었다. 해당 코드를 이해하고자 하나 씩 출력해보면서 코드 실행 과정을 따라 갔고 아래의 사진처럼 train을 돌릴 때 필요한 파일 경로를 정리하며 코드를 이해하였다. 이때까지만 해도 너무 많은 파일을 찾아 다녀야했기에 '왜 이렇게 짰을까'라는 생각을 했었다. 프로젝트가 끝날 때 쯤 내가 찾은 답으로는 결국은 '더 편한 코드 실행'을 위해서라 느꼈다. 해당 코드에는 하나의 모델이 아닌 여러 모델이 존재하고 하나의 모델 안에도 여러 개의 블럭들이 존재한다. 이를 실행할 때 자신이 변경할 부분에 코드를 찾아가며 실행하기 보다는 명령어로 입력 받아서 이를 실행할 수 있도록 하기 위해 코드가 모듈화 되어 여러 개의 파일을 거치며 실행되어야 한 것 같다. 

#4. Edge-Varient Graph Filter 추가

MLFF 모델 중 MACE를 기본으로 하고 이에 엣지 별 가중치를 학습하는 Edge-Varient Graph Filter를 추가하였다. 해당 필터는 아래의 논문과 Github에서 제공된 설명과 코드를 바탕으로 추가하였다. 해당 필터는 Interaction 블럭 안에서 학습할 때 같이 엣지 별 가중치가 학습되었다. 코드를 추가하던 와중 오류가 발생하여 디버깅하는데 꽤 걸렸다. 이는 Graph Filter의 입력 텐서 shape가 일관되지 않아서 출력 텐서 shape 역시 이에 맞추어 변경해주어야 하는데 정해진 shape로 설정해놔서 오류가 난 것이었다. 

 

GitHub - alelab-upenn/graph-neural-networks: Library to implement graph neural networks in PyTorch

Library to implement graph neural networks in PyTorch - alelab-upenn/graph-neural-networks

github.com

 

#5. 하이퍼 파라미터 튜닝

저번 프로젝트에서 하이퍼 파라미터 튜닝을 효율적으로 하지 못했다는 생각에 이를 개선하고자 노력하였다. 같은 모델도 서로 다른 파라미터를 가지고 있고, 조금씩 다른 버전의 모델이 있다 보니 버전 관리가 제대로 되지 않는다는 생각이 들었다. 그래서 Github에 따로 레포지터리를 만들어서 버전이 하나씩 완성될 때마다 Github에 올려 템플릿 형태로 쓸 수 있도록 관리하였다. 해당 버전의 코드를 받아 일관되게 모델을 사용할 수 있지만, epoch 및 파일 경로 등 직접 바꾸어 주어야 하는 부분이 있었기에 꽤 좋은 방법은 아니었던 것 같다. 지금 다시 되돌아보면, 해당 논문의 코드처럼 명령어만으로 이를 조절할 수 있게 매개 변수화하는 것과 sh 파일을 활용하면 조금 더 체계적으로 하이퍼 파라미터 튜닝이 가능할 것 같다.  

 

#6. 거리 분포 별 그래프 전처리

그래프를 생성하는 과정을 변형해보는 시도를 진행하였다. 대부분의 모델은 그래프를 생성할 때 최대 이웃 개수와 반경을 상수로 지정하며 가까운 거리 순으로 엣지를 생성하였다. 하지만, 모든 거리에 대해 이웃 분포 수를 기반으로 엣지를 생성하도록 변형해보았다. 

 

프로젝트 소감

챌린지에서 아주 아주 운이 좋게 상위 10%에 턱걸이로 들었다... (원래 12등이었는데 Private 리더보드에서 11등이 되어버렸다ㅎㅎ) 수상은 물 건너갔지만, 노베이스로 시작한 MLFF 분야에서 10%만으로 아주 감사한 결과이다. 모델 변형을 해도 성능이 손쉽게 오르지 않아서 아쉽긴 하다.... 후엥🥺

 


데아터 전처리, 모델 변형, 성능 평가 등 저번 프로젝트에 비해

모든 부분에서 전보다 주도적으로 참여했던 프로젝트였다.
어떠한 것을 추가하더라도 기대 만큼 성능이 나오지 않는 경우도 많고

오히려 모델이 무거워져서 성능이 떨어지기도 하는 상황에서 정해진 기간 내에 성과를 내는 것이 힘들었다.

그럼에도 이러한 끊임없는 도전과 실패의 과정을 따라 갈 수 있다는 것만으로 후회 없는 프로젝트였다.