학습 완료.
드디어 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 하는 코드 리뷰를...
'Resources > Personal Projects' 카테고리의 다른 글
[Uniprot Challenge] SVM model metric (0) | 2023.03.24 |
---|---|
[UniProt Challenge] Round 1, 종료. (0) | 2023.03.12 |
[UniProt Challenge] MMseqs2 : 10,000x faster BLAST & profile generator (0) | 2022.09.27 |
[UniProt Challenge] Protein database download (0) | 2022.09.27 |
[UniProt Challenge] PSI-BLAST & PSSM : Protein representation (0) | 2022.09.26 |
댓글