NVIDIA Video Codec SDK로 개발 된 Decoder의 Multi stream 이슈

bemong1·2023년 12월 27일
0

사내에서 운용중인 특정 서버들에서 발생했던 이슈에 대한 사건 노트(Issue History)

1. 개요 : Video 및 Audio의 Media Data들을 빠르게 Inference Model로 Serving하기 위해 nvdecoder를 이용하여 Decoder를 개발

  • C++(NVCC) Module을 개발, Decoding 된 Image Data를 Python으로 Serving

2. 사건 발생

  • 전반적으로 정상 작동 하였으나, Nvidia T4가 장착 된 서버들에서 이슈 발생
    • Single Stream 수행 시, 모든 서버에서 정상 작동
    • C++ 레벨에서 Multi Stream 수행 시, 모든 서버에서 정상 작동
    • Python으로 Serving 하는 과정을 포함하여 Multi Stream 수행 시, 해당 Nvidia T4가 장착 된 서버들에서만 간헐적으로 Crash가 발생하여 비정상 종료 됨 (빠르면 10초 이내, 늦게 발생하면 1시간...)

3. 증거 수집

  • 열심히 뒤적거린 결과, 2021년 6월, ‘NVIDIA VPF’에서도 동일한 이슈가 있었으며, 현재 필자가 겪는 문제와 오류 메세지를 포함하여 현상의 대부분이 유사함. 안타깝게도 이와 유사한 케이스를 해당 스레드 말고 찾을 수 없었음
  • 이슈 링크

    https://github.com/NVIDIA/VideoProcessingFramework/issues/219

  • 요약
    • ‘Tesla T4’에서 ‘NVIDIA VPF’를 이용해 Multi Stream 진행 시, 위 로그와 동일한 문제에 직면한 한 사용자가 해당 이슈를 올림
    • ‘NVIDIA VPF’측에서는 "Tesla T4"와 유사한 아키텍쳐를 가진 Quadro RTX5000으로(T4가 없었나…?) 해당 현상을 재현해보려 했으나 실패
    • 사용자가 제공한 로그로 부터, CUDA Context 및 push/pop 처리나, stream 관리가 미진한 것으로 추정하여, 해당 부분을 보완한 Hotfix 버전을 사용자에게 제공.

      https://github.com/NVIDIA/VideoProcessingFramework/commit/8041e2ed70870c440af340456a9332e7d85e8313)

    • 해당 Hotpix 버전 역시 실패…..(결과 로그는 다름)
    • 문제 방지를 위해, Multi Threading 대신, Multi Processing을 권장하고 있음…
    • ‘NVIDIA VPF’측은, 해당 이슈를 위해 시도해 볼 것이며, 관련해서 무언가가 나오면 업데이트 하겠다고 했으나, 해당 이슈에 대한 추가적인 내용은 없음

4. 미제 사건으로 분류 : 정황상 Nvidia T4를 의심할 수 밖에 없는 상황

  • 사내에서 운용중인 서버들에 사용되는 Nvidia 그래픽 카드들을 모두 전수조사 하여 테스트를 진행하였을 때, 유일하게 Tesla T4만 이상을 보임, 이외 그래픽 카드들은 모두 정상 동작
    • 테스트 그래픽카드 : T4, RTX A5000, V100, Quadro RTX 5000, TITAN xp, A10
  • 지속적인 디버깅 시도, 해결 실패
  • 또한, 유일하게 찾은 스레드의 게시자 역시 Tesla T4 유저였으며, NVIDIA VPF 팀 역시 Quadro RTX5000으로 재현을 시도하였으나 이를 실패하였음
  • 이로 인해 당분간, Tesla T4를 배제, 혹은 Single Stream으로 솔루션을 운용하는 정책으로 진행하였음

5. 반전(?)

  • 해당 사건의 실마리는 근 6개월이 지난 후, 다른 사건을 조사하던 중 발견 됨

  • nvencoder 개발 진행을 위해 각 서버별 그래픽카드 Driver 버전을 조사 중 특이점을 발견

    • NVIDIA 문서에서는 nvencoder 개발을 위한 최소 Driver 버전을 462.xx >= 로 명시하고 있음. 이를 위해 전수 조사 진행.
  • 이 와중에 특이사항이 발견되었는데, 공교롭게도 Tesla T4를 사용하는 서버들의 Driver 버전들만 5xx.xx 이하로 설치가 되어있었음

    | Server | GPU | NVIDIA Driver Version | Multistream Decoding |
    | --- | --- | --- | --- |
    | 1 | Tesla T4 | 450.216 | x |
    | 2 | Tesla T4 | 450.119 | x |
    | 3 | Tesla T4 | 470.57 | x |
    | 4 | RTX A5000 | 510.54 | o |
    | 5 | Tesla V100 | 515.86 | o |
    | 6 | Tesla V100 | 515.86 | o |
    | 7 | Quadro RTX 5000 | 510.47 | o |
    | 8 | TITAN xp | 510.6 | o |
    | 9 | NVIDIA A10 | 510.85 | o |
    | 10 | NVIDIA A10 | 525.85 | o |

6. 해결

  • 최신 버전 드라이버로 업데이트 이 후, "Tesla T4"에서도 해당 현상 사라짐
  • 필자와 동일한 경험을 한 스레드에도, 드라이버 업데이트를 통해 해당 이슈를 해결하였다는 답변이 1년이 넘게 지나서 올라옴 (좀 더 빨리 답변이 달렸다면....ㅠㅠ)

7. 결론

  • 모든 정황과 증거가 우연치 않게 "Tesla T4"를 용의자로 지목하고 있었던 사건
  • 하지만, 그는 진범이 아니였으며(공범일 가능성은 있음), 실제 진범은 예상하지 못한 곳에서 검거가 되었음
  • 해당 사건을 통해 많은 것을 느끼게 되었음
    • 디버깅 시, 의심가는 부분들에 대해 확인하고, 이미 다른 선배들이 답습한 다양한 사례를 통해 범위를 좁혀가며 해결하는 것은 분명히 정석
    • 하지만, 이 과정을 통해 찾아가는 길이 항상 옳은 길은 아니며, 제대로 된 방향으로 가고 있다고 착각하는 경우가 있을 수 있음
    • 잘못된 방향으로 향하면서 매몰 되는 경우가 있을 수 있으니, 다른 가능성에 대해서도 항상 의심해봐야 함
profile
개발자

0개의 댓글