Pytorch 코드에서 텐서 모양 오류를 감지하기위한 정적 분석기 인 Pytea는 몇 가지 전략을 사용하여 복잡한 실행 경로를 처리합니다.
1. 보수적 인 가지 치기 : Pytea는 보수적 인 가지 치기 기술을 사용하여 실행 경로 수를 줄입니다. 이 방법은 경로 폭발을 방지하는 데 도움이되며, 수많은 조건부 분기로 코드를 분석 할 때 발생할 수 있습니다. Pytea는 덜 관련된 경로를 가지 치기로 텐서 모양 오차를 포함 할 수있는 가장 중요한 실행 경로에 중점을 둡니다 [1] [2].
2. 기호 추상화 : PYTEA는 루프 및 조건부 진술의 분석을 단순화하기 위해 기호 추상화에 의존합니다. 이 추상화를 통해 Pytea는 코드를 실행하지 않고도 코드를 분석 할 수 있으므로 복잡한 경로를 처리하는 데 더 효율적입니다 [1] [2].
3. 루프 취급 : 루프의 경우 Pytea는 일정한 루프를 풀고 직선 코드 버전을 분석합니다. PYTEA는 데이터 세트를 반복하는 것과 같은 알려지지 않은 경계가있는 루프의 경우 고정 크기의 미니 배치 및 작은 잔류 미니 배치의 두 가지 경우에 대해 루프 본체를 분석합니다. 이 접근법은 실행 경로 분석을 복잡하게 할 수있는 루프의 분석을 단순화합니다 [1] [2].
4. 시간 초과 메커니즘 : 가지 치기에도 불구하고 실행 경로 수가 여전히 너무 커지면 PYTEA는 타임 아웃 메커니즘을 사용합니다. 이것은 가능한 모든 경로를 완전히 탐색하지 않더라도 분석이 지나치게 오랜 시간이 걸리지 않도록합니다 [1] [2].
이러한 전략을 결합함으로써 Pytea는 Pytorch 코드의 복잡한 실행 경로를 효율적으로 처리하여 텐서 모양 오류를 빠르고 정확하게 감지 할 수 있습니다.
인용 :[1] https://sf.snu.ac.kr/publications/pytea.pdf
[2] https://arxiv.org/pdf/2112.09037.pdf
[3] https://sf.snu.ac.kr/pytea/
[4] https://www.researchgate.net/publication/357114953_a_static_analyzer_for_detecting_tensor_shape_errors_in_deep_neural_network_training_code
[5] https://dl.acm.org/doi/10.1145/3510454.3528638
[6] https://discuss.pytorch.org/t/pytorch-coding-conventions/42548
[7] https://www.computer.org/csdl/proceedings-article/icse-companion/2022/959800a337/1eapbpbou12
[8] https://stackoverflow.com/questions/57410835/define-a-relative-path-folder-inside-a-function-t that-run-code-on-both-cmd-and-id