Resources/Personal Projects

[UniProt Challenge] Inferencing test data : 메모리... 메모리...

Cho et al. 2022. 12. 13.

학습 완료.

드디어 Uniprot binding challenge 의 모델의 학습이 끝났다. 

시험보고 하느라 좀 늦어진 것 같긴 한데... 

그래도 validation metric 은 괜찮은 듯 하다. 

이 대회는 training set : 19만개, test test : 100만개 (...?) 인 대회라,

대회 Kickoff meeting 에서도 말했지만 Uniprot 에서 annotated 되지 않은 protein 들의 binding site 를 조금이라도 예측해보고자 만든 대회다.

 

 

문제점

모델 파라미터는 0.6M , 가벼운 모델인데 아무래도 테스트 데이터가 100만개 정도이다 보니 이게 좀 걸림돌이었다.

1) 지금 모델이 아미노산 잔기에 대해서 하나하나 binding ion 과, binding score 를 제공해야하다 보니 나는 이번에 sliding window 를 적용해서 9mer 를 만들고, 서열 중간에 있는 잔기에 대한 예측을 진행 한 것인데...

2) batch size 를 정해놓고 inference 를 하면 Input protein 의 length 가 모두 틀리기 때문에 Inference 된 결과에서 하나의 protein 에서 만들어진 window 들의 수를 구한 다음에 그 수에 해당하는 추론결과를 모아서 해당 protein 에 mapping 해야 했다.

3) 2) 를 시도하려면 testset data loader 를 고쳐서 해야 했는데, 이것은 우선 보류. 

4) 더 큰 문제점은 그냥 online mode 로 Inference 를 해봤을 때 메모리가 엄청나게 올라가더라는 것... 이걸 해결하기 위해 garbage collection 이나 tf.keras.backend.clear_session() 도 적용해봤지만 해결할 수가 없었다. 뭐가 문제인건지 이건 해결해보고 싶다.

해결방안

결국에 내가 택한건 queue 형식으로 inference script 를 만들어서 PBS에 넣는 것 처럼 한번에 쭉 넣자! 였는데, 왜냐하면

이렇게 해야 한번 Inference 가 끝나고 메모리도 자동 반환 되니까 ( Python ? )

경과

따라서 현재 inference 가 진행 중이다. 

한 1000개 정도를 한번에 추론하는 스크립트 1000여개를 만들었고, 이를 bash 로 집어넣었다.

1000개는 사실 heuristic으로 정한것인데 막상 돌려보니 생각보다 빨라서, 만약 이 대회 Round 1 을 통과한다면 개선해야할듯.

 

추론 결과는

Protein Binding ion per residue Binding score per residue
Protein_test 29,29,29,29,2,29,29,29,5,29,29,29 0.8,0.5,0.4,0.3,0.9,0.2,0.5,0.4,0.4,0.4

 이런 식으로 뽑았는데, 

 

대회에서 요구하는 것은

 

이런 식의 예시라서 이렇게 바꾸는 것도 짜야겠다.

 

다음번엔 100만개 추론 결과를 parsing 하는 코드 리뷰를...

 

댓글