최신 엔비디아 CUDA 아키텍처에서의 결정적 변경 사항을 보면 "알고 있을 필요 없음" $\rightarrow$ "모르면 AI 최적화 불가능" 그 이하는 system에서 처리" $\rightarrow$ "독립적 스레드 스케줄링 (ITS)" "Thread Block 단위 (순서 없음)" $\rightarrow$ "Thread Block Cluster 계층의 등장" AI 행렬 연산 시 이웃한 SM들끼리 메모리를 공유하며 고속으로 데이터를 주고받고 있는데 강의에 추가로 알려주시면 좋을 것 같아요 시간에 흐름에(구현 알고리즘) 따르 아키텍처도 많이 변경되고 있으니까요
영상과 같이 잘 설정했음에도 불구하고, 저와 같은 문제가 생기시는 분들은 참고해 주세요. 원인은 Windows Docker Desktop 환경에서 자동으로 처리되어야 할 host.docker.internal 을 extra_hosts: host.docker.internal:host-gateway 로 강제로 덮어쓴 것 입니다. 그 결과 OpenWebUI 컨테이너가 Windows 호스트의 FastAPI 8080 서버가 아니라 172.17.0.1:8080 으로 접속했고, 해당 위치에는 요청을 받을 서버가 없어 Connection refused 가 발생했습니다. 에러 로그: Cannot connect to host host.docker.internal:8080 Connect call failed ('172.17.0.1', 8080) OpenWebUI는 host.docker.internal:8080 에 접속하려 했는데, 컨테이너 내부에서 그 IP를 172.17.0.1 로 해석됐고, 결국 172.17.0.1:8080 으로 접속하다가 실패했습니다. 문제의 원인은 `docker-compose.yaml 에 있었습니다. extra_hosts: - "host.docker.internal:host-gateway" extra_hosts 는 컨테이너 내부의 /etc/hosts 에 hostname/IP 매핑을 추가하는 Compose 설정입니다. Docker Compose 문서에서도 extra_hosts 는 컨테이너의 hosts 파일에 hostname 매핑을 추가하는 기능이라고 설명합니다. [ 참고 ] 실제로 도커 데몬 내부에 /etc/hosts 를 보면 아래와 같은 결과를 볼 수 있습니다. 해결 방안은 아래와 같이 extra_hosts 설정을 주석 처리하시면 됩니다.
안녕하세요 선생님. 강의 잘 듣고 있습니다. Runpod 옵션에 대해서 최신 사항을 갱신해야 될 것 같아요ㅠㅠ 만들어진 지 얼마 안된 강의임에도 불구하고 현재 Runpod 에서 CUDA versions 12.8 기준으로 선택할 수 있는 GPU 선택지가 거의 없습니다.. 이유는 모르겠으나 RTX 4090, 5090 으로 생성 하려고 해도 아래와 같은 경고문만 뜨네요. 하는 수 없이 RTX PRO 6000 WK 으로 선택해서 진행 중입니다. 어제는 RTX 5080 이 선택 가능하길래, 이걸로 진행했다가 오늘 아침에 다시 restart하니까 에러가 뜨더라고요.. ps. torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 394.00 MiB. GPU 0 has a total capacity of 15.48 GiB of which 367.06 MiB is free. Including non-PyTorch memory, this process has 15.11 GiB memory in use. Of the allocated memory 14.24 GiB is allocated by PyTorch, and 501.88 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables) 선생님 말씀대로 24GB 이상으로 골라야 하니,RTX 5080(16 GB VRAM)는 안되네요 ㅋㅋㅋ
ch. 12에서 약 만 개의 데이터를 처리(add)하는 예제를 설명해주셨습니다. 이때, core 1개만 사용 시 오류가 발생한다고 말씀하셨습니다. 이는 'SM이 1 block 단위로 처리하게 되는데, 1 block 당 최대 1024 thread를 할당 가능하기 때문이다.'라고 이해하면 될까요? 기존 설명해주신 내용들을 떠올리면 여기서의 core는 SM의 의미일 것 같은데, 보통 core는 SM보단 SP에 가까운 것 같아 문의 드립니다. 좋은 내용 강의해주셔서 감사합니다.
안녕하세요 강사님 강의 잘 듣고 있습니다. 강의 내용중 좀 더 이해하고 싶은 부분이 생겨 질문드립니다. #질문 1 8분53초의 화면상의 ppt 슬라이드를 보면 행렬의 shape를 (a,m ), (m *n ), (a, n) 적어주셨는데 각각의 의미가 궁금합니다. (a,m) 은 무엇을 의미하는 행렬이며 이때 a,m각각은 무엇을 나타내는지, (m*n) 행렬은 무엇을 의미하는 행렬이며 m,n은 무엇을 나타내는지 (a,n) 행렬은 무엇을 의미하는 행렬이며 a,n은 무엇을 나타내는지. ( 제 추측으론, m은 모델의 vocabulary 사전의 개수. 또는 토큰id의 max값 같기도하고...n은 벡터의 길이 같기도하고....) #질문 2 그리고 파인 튜닝을 위해 qlora n*n 행렬이 그림상에 추가되었는데, 개념적으로 데이터가 추가되었다고는 이해되는데 실제 물리적으로는 데이터가 어떻게 추가된것인지 궁금합니다. 단순히 m*n 행렬에 n행이 추가되어 m+n, n 행렬이 되었다든지...
gemma 2b 모델 runpod 클라우드 사용하지 않고도 로컬 runpod 을 띄워서 구동이 가능할거 같은데 가능할까요? 클라우드 비용을 지불 하고 찾아보니 16GB 정도면 넉넉하다고 하네요ㅠ https://merlio.app/blog/run-google-gemma-2b-locally runpod 기본 크레딧 충전이 10달러인데 간단한 처음 입문하는 분들 입장에서는 실습으로 쓰기에 부담이 좀 될거 같습니다.
LLM 파인튜닝을 해본적이 없어서 궁금한점이 많습니다. 현재 강의의 목적이 shakepeare 스타일의 번역이라고 하셨는데, 그러면 이 강의를 들으면 번역에만 국한 되는건지, 아니면 사용자의 질문에 대답하는 챗봇 형태 등 다른 목적이나 분야도 커버가 되는건지 궁금합니다.
CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 강의를 최대한 따라 해보았는데 실행은 잘되고 cuda success까지 잘 나오는데 오류랑 경고가 없어지지 않아 질문 남기게 되었습니다.
CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. print를해서 error를 처리했다고 표현하셨는데 해결을 했다는 의미가 아니고 그냥 print한 것이 처리했다는 의미가 맞나용? print를 했으니깐 reset해주는 것이고요 PeekAtLastError()는 print도 안하고 하면 볼 수 있는 것도 없는건가요?
CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. v12.8인데 samples 파일이 없습니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 좋은 강의 감사합니다. 3중 for loop 개선책 설명해주신 부분 이해가 가지 않아 질문드립니다. 말씀하신건 A도 B도 C도 캐쉬 친화적으로 이동 한다고 말씀하셨는데 A배열은 아래로 움직이지 않나요? 물론 matmul-host.cpp 보다는 캐쉬 미스 확률이 좋아지겠지만 A배열의 인덱스 이동은 캐쉬 친화적인거 같지 않은데 강의에서는 A도 옆으로 움직인다고 하셔서 헷갈려서 문의드립니다.
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 좋은 강의 감사합니다. transpose-shared.cu 가 느린 이유에 대해 질문이 있습니다. 강의 23-2에서는 X축으로 읽는 것이 아니라 Y축으로 메모리를 사용했기 때문에 느려졌다고 설명해 주셨습니다. 보통 이런 경우, 이중 for문을 돌릴 때 메모리 공간 지역성(spatial locality)으로 인해 X축(연속된 메모리)으로 읽는 것보다 Y축(연속되지 않은 메모리)으로 읽는 것이 더 느리다고 알고 있습니다. 하지만 이 transpose-shared.cu CUDA 예제에서는 각 스레드가 배열의 단 하나의 인덱스만 사용하므로, 이중 for문에서 발생하는 문제라기보다는 이후 강의에서 설명해 주신 Bank Conflict가 발생해서 느려진 것이 아닐까 생각했습니다. 제 생각이 맞는지 여쭤보고 싶습니다. 수정 및 추가 질문) 챕터16강의 다시 보고 제 생각이 틀렸다는것을 인지했습니다. 그럼 결국 데이터를 저장할때도 캐쉬 문제인것일까요? transpose-block.cu 는 캐쉬에 저장하고 한번에 flush가 가능하지만 transpose-shared.cu 는 저장할때마다 캐쉬미스가 발생해서 매번 global memory에 접근해야하니 느려지는것일까요?