소개
저는 10+년 동안 소프트웨어 분야에서 일하고 있습니다. 그래픽스, 병렬 컴퓨팅에 관심이 매우 많으며 XPU의 전문성을 키우기 위해 노력하고 있습니다. 저는 삼성전자, AMD, 라인플러스, 카카오브레인을 거쳐서 지금은 Qualcomm 근무하고 있습니다. 개인 사정으로 이직을 하지는 않았지만 Imagination Technologies, 42dot, 하이퍼커넥트, 네이버랩스, Amazon, Google, NVIDIA에 최종 합격한 경험도 있습니다. 앞으로 제가 배운 지식을 여러분에게 공유하고 여러분들로부터 많은 것을 배우고 싶습니다. 🙇
강의
전체2수강평
- 매우 쉽게 그러나 효과적으로 가르쳐주십니다~!!
손동휘
2024.04.12
1
- 기본적인 개념을 익히는데 큰 도움이 되었습니다.
박승근
2023.12.14
1
- 친절한 기초 강의 감사합니다.
원덕희
2023.11.02
1
게시글
질문&답변
2024.04.13
혹시 강의에 나오는 예제 코드를 받을 수 있는건가요?
예제가 제공됩니다. https://github.com/daemyung/practice-cmake 에서 다운받으실 수 있습니다.
- 0
- 1
- 42
질문&답변
2024.02.18
코드가 실행되는 순서에 관하여
안녕하세요? 네 맞습니다! 알고 계신 순서로 실행이 됩니다. 그리고 triton.jit 데코레이터의 역할은 해당 함수를 Triton 커널로 정의하는 것입니다. triton.jit 데코레이터를 명시한 함수는 실행전에 컴파일 과정을 거치게 됩니다. 감사합니다.
- 0
- 1
- 100
질문&답변
2024.02.18
실행을 위한 최적 환경
안녕하세요? 먼저 강의를 수강해주셔서 감사합니다. 예제가 실행이 되지 않아 속상하시겠어요. 지금 발생한 에러는 Triton의 문법 에러입니다. 예전 버전의 Triton은 커널 호출시 값을 반드시 1개는 전달해줘야 했습니다. 최신 버전의 Triton은 이러한 버그가 수정되어서 커널을 호출할 때 값을 전달하지 않아도 됩니다. 저희가 처음 사용하는 hello_triton 은 전달 인자가 없어서 Syntax 에러가 발생하게 됩니다. File " ", line 2 def hello_triton(, grid=None, num_warps=4, num_stages=3, extern_libs=None, stream=None, warmup=False, device=None, device_type=None): ^ SyntaxError: invalid syntax 공유해주신 에러 메세지를 살펴보면 코드가 hello_triton(, 인 것을 확인할 수 있습니다. 즉 , 가 쓸모없이 추가되었기 때문에 문법 에러가 발생하고 컴파일이 되지 않는 것입니다. 그래서 RuntimeError: Triton Error [CUDA]: device kernel image is invalid 같이 커널이 이상하다는 에러가 발생하는 것이라고 생각됩니다. Triton은 최신 데일리 버전을 사용하는게 가장 좋다고 생각합니다. 주의해야할 점은 Torch도 Triton을 사용하기 때문에 Torch를 설치할 때 기존에 설치된 Triton은 삭제되게 됩니다. 그러면 이런 에러가 또 발생할 것입니다. 이것을 방지하기 위해서 Torch를 먼저 설치하고 그 다음 Triton 최신 데일리 버전을 설치하시면 됩니다. 감사합니다.
- 1
- 1
- 173
질문&답변
2024.02.15
강의 계획에 대하여
안녕하세요? Triton 톺아보기는 Triton을 전반적으로 다시 보는 내용을 다루지는 않습니다. Triton에서 추가로 제공하는 기능을 자세히 살펴보는 내용을 다룰 예정입니다. 해당 섹션에서 다룰 첫 주제는 Heuristics입니다. 제가 개인적인 사정으로 시간을 내기 어려워서 강의 제작에 시간을 쏟지 못하고 있습니다. 이점 양해 부탁드리겠습니다. 감사합니다.
- 0
- 1
- 100
질문&답변
2024.02.13
행렬곱 오차 문제
안녕하세요? 아담한 고슴도치님, 먼저 강의를 수강해주셔서 감사합니다. 계산의 결과가 다른 이유는 크게 2가지가 있습니다. 첫째, 다른 데이터 타입을 사용함에 따라 오차가 발생할 수 있습니다. 예제의 경우 행렬을 곱을 tl.dot (x, y, allow_tf32=False)를 호출해서 계산했습니다. 만약 allow_tf32에 True가 설정되어 있거나 allow_tf32가 정의되어 있지 않는 경우에 오차가 발생할 수 있습니다. Triton이 행렬을 빠르게 계산하기 위해 float32를 tf32로 변환한 뒤 Tensor Core를 사용하기 때문입니다. tf32의 경우 float32보다 정밀도가 낮은데, 이 차이로 인해 계산의 오차가 발생할 수 있습니다. 둘째, 계산 순서에 따라 결과가 달라질 수 있습니다. float32는 IEEE 754 표준에 맞춰서 구현되어 있습니다. 지수에 8비트가 사용되고 가수에 23비트가 사용됩니다. 그러므로 float32는 실수를 다 표현할 수 없습니다. 이러한 한계 때문에 계산 순서에 따라 오차가 발생할 수 있습니다. 이러한 현상은 쉽게 확인할 수 있습니다. 크기가 20000인 배열에 실수가 저장되어 있는 경우, 순서대로 실수의 합을 더할때와 역순으로 실수의 합을 더할때의 결과가 다른 것을 확인할 수 있습니다. 이 2가지의 경우 하드웨어의 한계로 발생하는 오차입니다. 개인적으로 저는 이러한 오차를 오차라고 생각하지 않습니다. 마지막으로 예제 코드의 경우 경계 검사가 되어있지 않습니다. 텐서의 크기와 블록의 크기가 정확히 나누어 떨어지지 않는다면 쓰레기 값이 임시 텐서에 로드되게 되고 이것이 잘못된 결과를 만들 수 있습니다. 요즘 제가 바빠서 답변이 늦었는데 죄송합니다. 궁금하신점 있으시면 계속 물어봐주세요. 감사합니다!
- 1
- 2
- 127