Skip to content

torch.jit.trace에서 granularity를 조절하는 방안에 대한 질문 #3

@returnwellbeing

Description

@returnwellbeing

안녕하세요. 1주차 모임에 참석한 오대환(DAEHWAN OH) 입니다.
모임 중 "torch.jit.trace에서 granularity를 조절하는 방법이 있을까요?" 라는 질문을 드렸었고 해당 내용을 기록하고자 issue로 남깁니다.

우선 granularity(세분성) 단어를 어떤 맥락에서 사용하였는지, 말씀드리면 좋겠습니다.
컴파일 결과물이 작은 단위로 구분된다면 -> Fine-grained
반대로 큰 단위로 구분된다면 -> Coarse-grained
라고 여기며 granularity 단어를 말씀드렸습니다.

Granularity를 조절하고 싶었던 가장 큰 목적은 하드웨어(A,B,C)를 감안한 최적화를 할때 유용하지 않을까? 싶어서 였습니다.
A. Fused_ops(AI 모델에 사용되는 Operator들을 하나의 동작으로 통합한 경우)를 효율적으로 지원하는 하드웨어가 존재
B. 기본 Operator(Matmul, Conv, Batchnorm 등등)들만 지원하는 하드웨어
C. 정말 기본적인 scalar 덧셈, 곱셈 등 연산만 지원하는 하드웨어만 존재

torch 컴파일러가 스마트해서 PC/서버에 있는 하드웨어 상황을 파악하고 그에 맞는 결과물을 내놓는 다면 더 좋을거라 생각했습니다 :)
Fused_ops를 지원하는 하드웨어가 있는데(A 경우) 굳이 B,C의 granularity에 맞는 결과물을 내놓을 필요가 없지 않을까요?
이런 의문에서 torch의 매뉴얼을 살펴봤고 아쉽게도, granularity 관련 옵션들이 없었습니다.
스크린샷 2024-12-05 오후 9 29 12

마지막으로 Sunghyun Jun님께서 남겨주신 답변을 공유드리고 마무리 하겠습니다.
(답변 주신 Sunghyun Jun님, 감사드립니다.)

CPU granularity의 경우, torch.jit.trace의 경우 openmp를 사용합니다. 아래를 참고하실 수 있습니다.
https://pytorch.org/docs/stable/torch.compiler_profiling_torch_compile.html

CPU에서 동작시키는 경우, Torch 컴파일러가 openmp를 타겟으로 최적화를 진행하는 것으로 이해했고 좀 더 자세히 들어가면 GNU openmp / Intel openmp의 선택지가 더 있는 것으로 보입니다.

이상으로 모임에서 드렸던 질문 내용을 정리하였습니다.
제가 컴파일러 전문가가 아니라서 용어나 설명이 틀렸을 수도 있습니다 >.< 너그럽게 생각해주시고 편하게 의견이나 보충 설명 부탁드립니다.
모임에서 같이 공부하고 배우면서 성장할 수 있었으면 좋겠습니다. 감사합니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions