pytorch 2

텐서에서 Top-K 결과를 받아오는 방법

최근 RAG(Retrieval Augmented Generation)과 같은 반환 기반의 솔루션들이 많이 사용되면서 정보 반환의 중요성이 더 강조되어지고 있다. 물론 벡터 데이터베이스 등의 다른 솔루션을 사용해서 문제를 해결할 수도 있으나, 상황에 따라 상위 K개의 결과를 반환하는 알고리즘 및 기능을 직접 구현해야 하기도 할 것이다. FAISS나 ChromaDB도 좋은 툴이지만, 개인적으로는 torch.topk() 메소드를 사용하는 유사도 반환 방식 역시 알아둘 필요가 있다고 본다. 가장 큰 이유는, FAISS나 ChromaDB 등의 솔루션의 경우에는 상당한 양의 메모리를 소모한다. 더 빠른 결과의 반환을 위해 인덱싱을 하다보니 그만큼 많은 메모리를 사용하게 된다. 이는 다시 말해, 물리적 한계로 인해 ..

AI/PyTorch 2023.10.26

cuDNN benchmark 활성화를 통한 최적의 알고리즘 선택

PyTorch 프레임워크 내에는 다양한 CUDA 커널들이 있다. 이로 인해 다양한 환경에서도 최적의 성능을 낼 수 있게 하지만, 어떤 의미로 보면 너무 복잡하게 느껴질 수도 있다. 실제로, CNN에서 Conv2D 레이어의 forward pass에 대한 cuDNN 알고리즘만 하더라도 하나가 아니다. 물론, 모두 충분히 빠르다고 할 수 있지만, 그럼에도 현재 실행되는 환경에 더 최적화된 커널이 존재하는 법이다. 파이토치의 백엔드 cudnn API에는 benchmark라는 플래그가 있는데, 이 플래그를 활성화시키면 파이토치에 내장된 auto-tuner가 활성화되면서 가장 최적화된 cudnn 알고리즘을 자동으로 선택해주게 된다. import torch.backends.cudnn as cudnn # type: i..

AI/PyTorch 2023.10.14