전체 글 1277

[DGX Spark] deepseek-v4-flash-0731 Q1 모델 적용 실패기

회사의 NVIDIA DGX Spark 장비에 "deepseek-v4-flash-0731" Q1 모델을 딸깍 설치하여 운영해 보려했으나, 실패한 내용을 기록해 둡니다.딸깍 레시피: https://github.com/0xSero/deepseek-v4-flash-0731-spark-sparkinfer/약 3일이 넘는 시간이 걸려 도커 컨테이너 및 "deepseek-v4-flash-0731:q1" 모델의 다운로드가 완료되었습니다. (모델을 다운로드 받으려면, 허깅 페이스에 대한 접근 권한(토큰)이 필요합니다.)$ docker imagesIMAGE ID DISK USAGE CONTE..

카테고리 없음 2026.08.19

펌웨어 빌드와 단위 시험 빌드, 디렉터리를 분리한다는 것의 의미

CMake로 임베디드 프로젝트를 구성하다 보면 "일반 펌웨어 빌드와 단위 시험 빌드의 디렉터리를 분리한다"는 표현을 자주 접하게 됩니다. 이 표현만 보면 "CMakeLists.txt" 파일을 각각 따로 만들어야 하는 것인지, 소스 폴더 구조를 어떻게 나눠야 하는 것인지 혼동이 생기기 쉽습니다. 이번 글에서는 이 구조가 실제로 무엇을 분리하는 것인지 정리해 보겠습니다.디렉토리 분리에 대한 오해결론부터 말씀드리면, 분리 대상은 "CMakeLists.txt" 파일이나 소스 폴더 구조가 아닙니다. "CMakeLists.txt"는 프로젝트 전체에 하나만 존재하며, "src"와 "test" 폴더 구성도 그대로 유지됩니다. 실제로 분리되는 것은 "cmake -B" 명령으로 지정하는 빌드 산출물 디렉터리입니다.하나의 ..

프로그래밍 2026.07.28

프로젝트의 CMake 빌드 옵션 확인하는 방법

프로젝트를 진행하다 보면 여러 서브 프로젝트를 추가하는 경우가 발생하는데, 각 서브 프로젝트별로 어떤 빌드 옵션이 제공되는지 문서를 찾아가며 확인하는 방법은 꾀 시간이 걸립니다. 이번 글에서는 CMake 프로젝트에서 어떤 옵션이 정의되어 있는지 확인하는 방법을 정리해 보겠습니다.CMakeCache.txt 직접 확인빌드 디렉터리에는 항상 "CMakeCache.txt" 파일이 생성됩니다. 특정 옵션만 빠르게 확인하고 싶다면 "grep"을 활용하면 됩니다.grep BUILD_UNITTEST build/CMakeCache.txtBUILD_UNITTEST:BOOL=ON"CMakeCache.txt" 파일을 직접 편집기로 열어서 직접 확인하는 방법이 가장 단순하지만, 일일이 옵션만 찾기는 어렵습니다.이 방법은 권장해..

프로그래밍 2026.07.27

CMake 빌드 옵션을 어떻게 만들까

임베디드 프로젝트를 진행하다 보면 "단위 시험(Unit Test) 코드는 평소에는 빌드하지 않고, 필요할 때만 포함시키고 싶다"는 요구가 자주 생깁니다. 이번 글에서는 CMake 프로젝트에서 빌드 옵션을 지정하는 방법을 정리해 보겠습니다.빌드 옵션 핵심 원칙먼저 짚고 넘어가야 할 부분이 있습니다. 빌드 옵션은 "cmake --build" 단계가 아니라 "Configure" 단계에서 지정해야 한다는 점입니다. 즉, 옵션에 따라 어떤 타겟을 생성할지는 "cmake -B" 명령을 실행하는 시점에 결정됩니다.옵션을 지정하는 네 가지 방법방법 1. option() 사용 (권장)가장 널리 쓰이는 방식입니다. "CMakeLists.txt"에 다음과 같이 옵션을 선언합니다.option(BUILD_UNITTEST "Bu..

프로그래밍 2026.07.26

"쉘터(Shelter, 2026)"를 본 후에...

감상 제이슨 스타뎀의 화려한 액션을 기대하며 영화를 보았습니다. 하지만 결과적으로는 기대보다 실망이 훨씬 컸던 관람이었습니다. 무엇보다 이야기의 흐름 자체가 너무 이상하게 흘러가서, 정작 기대했던 액션조차 온전히 즐기기 어려웠습니다. 영화가 시작되는 순간부터 끝나는 순간까지 "왜?"라는 의문만 계속해서 쌓여갔고, 결국 엔딩에 다다라서도 "설마 이게 끝인가? 대체 왜?"라는 생각으로 마무리되고 말았습니다. 옛 동료의 조카를 지키고자 하는 주인공의 마음은 충분히 이해할 수 있었습니다. 그러나 극의 설정 자체가 쉽게 납득되지 않았습니다. 무려 10여 년 동안 은둔해 있던 중요한 인물이 갑자기 각성한 듯 위험 속으로 뛰어들더니, 결국에는 그 조카를 갱단을 통해 다른 곳으로 보내는 선택을 합니다. 이 결정이 ..

취미/영화보기 2026.07.26

"굿 포츈(Good Fortune, 2025)"를 본 후에...

감상 키아누 리브스가 출연한다는 소식에 혹시 화려한 액션이 펼쳐지지 않을까 기대하며 영화를 봤습니다. 그러나 영화 속 키아누는 날개마저 소박한, 조심성 많은 천사 가브리엘로 등장합니다. "운전 중 문자하는 사람들을 구하기"하는 소심한 천사가 두 영혼의 삶을 맞바꾸는 계획을 세우는 순간부터, 영화는 기대와는 전혀 다른 방향으로 흘러갔습니다. 가브리엘(키아누 리브스)은 삶의 방향을 잃고 헤매는 아지에게 미래 삶의 가능성을 보여 주어 그를 구하고 싶었습니다. 그래서 선택한 방법이 아지와 그가 잠시 비서로 일했던 부유한 벤처 투자자 제프(세스 고든)의 삶을 맞바꾸는 것이었습니다. 선의에서 비롯된 개입이었지만, 가브리엘의 계획은 예상대로 흘러가지 않습니다. 두 사람의 삶을 바꾸어서 마사에게 벌칙?으로 가브리엘..

취미/영화보기 2026.07.12

잡생각이 많은 나에게...

오늘은 머릿속에 생각이 너무 많아서, 그 생각들 사이에서 멍하게 보내는 시간이 길어지고 있다는 것을 새삼 느꼈다. 생각이 많은 것 자체는 나쁜 게 아니라고 본다. 다만 그 생각들이 정리되지 않은 채 머릿속에서만 떠다니다 보니, 막상 해야 할 일들은 자꾸 뒤로 밀리고 있는 것 같다. 생각은 깊어지는데, 정작 손은 움직이지 않는 상태가 반복되고 있다. 그래서 오늘은 일단 노트를 펼치고 볼펜으로 생각들을 적어보았다. 신기하게도, 글로 옮기는 순간 머릿속에서 빙빙 돌던 것들이 한결 가벼워지는 느낌이었다. 적다 보니 "지금 해야 할 일"과 "그냥 고민으로만 남아 있던 것"이 자연스럽게 나뉘었다. 손으로 직접 쓰는 게 느리다고 생각했는데, 오히려 그 느린 속도가 생각을 한 번 더 정리해주는 것 같다. 정리한 일들을..

낙서장 2026.06.02

작은 GPU 메모리 환경에서 RAG 구축의 한계

최근 로컬 AI 환경에 대한 관심이 높아지면서, 비교적 저사양의 GPU에서 소형 언어 모델(sLLM)을 활용해 RAG(Retrieval-Augmented Generation) 시스템을 직접 구축해 보려는 시도가 늘고 있습니다. GPU 메모리가 8GB인 환경, 즉 RTX 3070이나 RTX 4060 같은 소비자용 그래픽 카드 한 장으로 RAG를 운용하는 것이 과연 가능한 일인지, 그리고 실제로 어떤 어려움을 맞이하게 되는지 정리해 보았습니다.RAG란 무엇인가RAG는 대형 언어 모델(LLM)이 사전 학습된 지식만으로 답변하는 대신, 외부 문서를 실시간으로 검색하여 그 내용을 바탕으로 답변을 생성하는 방식입니다. 기업 내부 문서 검색, 기술 지식베이스 Q&A, 법률·의료 문서 요약 등 다양한 분야에서 활용되고..

Linux,Unix,BSD 2026.05.29

[C++] Treiber Free List에서 "ABA 문제"란?

지난 두 편의 글에서는 "Treiber 프리리스트"의 push/pop 구조와, 그 근간이 되는 "CAS(Compare-And-Swap)" 연산에 대해 알아 보았습니다. 그런데 Treiber Stack을 실제로 이해하고 안전하게 사용하려면, CAS 하나만으로는 충분하지 않습니다. CAS와 함께 반드시 짚고 넘어가야 하는 것이 바로 "ABA 문제"입니다.CAS를 다시 짚어보며앞선 글에서 정리했듯이, CAS는 다음과 같이 세 개의 값을 비교하여 원자적으로 값을 교환하는 연산입니다.CAS( 현재값(Current), 기대값(Expected), 새값(New))if (Current == Expected){ Current = New; return 성공;}else{ return 실패;}여..

[C++] Treiber Free List에서 CAS(Compare-And-Swap)란?

지난 글에서는 mutex 없이 push/pop을 처리하는 "Treiber 프리리스트"에 대해 정리해 보았습니다. 그런데 이 자료구조가 어떻게 락 없이도 스레드 안전성을 확보할 수 있는지는, 결국 그 바탕이 되는 "CAS(Compare-And-Swap)"라는 연산을 이해해야 온전히 설명이 됩니다. 이번 글에서는 Treiber 프리리스트의 push/pop 루프 안에서 반복적으로 등장했던 이 CAS 연산을 좀 더 자세히 정리해 둡니다.CAS란"CAS"는 "Compare-And-Swap"의 약자로, 우리말로는 "비교 후 교환" 또는 "비교해서 같으면 바꾼다"는 의미로 옮길 수 있습니다. CPU가 제공하는 "원자적(Atomic)" 명령이라는 점이 핵심입니다.동작 원리CAS는 다음과 같은 세 개의 값을 사용합니다...

728x90