jetson nano 4GB 에서 시도함.
cuda는 버전에 낮아서 안되고(llama.cpp가 cuda 12/13 지원. 얘는 10.x)
docker에서는 nvidia vulkan이 없어서 가속을 할 수 없어서 native vulkan빌드 부터 개고생해서 올렸는데
노력대비(2일 풀로 가동..) 효율이 좋다고 할 순 없겠지만,
그래도 나름 괜찮은 성능과 vulkan 가속이라 cpu 점유율 낮출 수 있다는게 그나마 위안인가..
그런데 이러면 발열은 어떨려나? cpu쪽이 더 낮을까.. gpu 쓰는게 낮을까?
옆에 스크롤이 점만해졌음 ㅋㅋㅋ 중반쯤에 포기하자는거 끝까지 멱살잡고 캐리해서 진행해버림
ㅋㅋ 이러니 ai가 반란을 일으키고 터미네이터가 되는건가 ㅋㅋ

2GB 메모리라면 최소한 스왑 6GB 이상은 해야 할 것으로 보인다.
| sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile |
일단 gcc9를 설치하면 손쉽게 행복해짐
| sudo apt-get install -y software-properties-common sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install -y gcc-9 g++-9 |
빌드를 위한 헤더들 및 버전 맞추기
| dpkg -l | grep nvidia-l4t sudo apt-get update sudo apt-get install --only-upgrade -y \ nvidia-l4t-core \ nvidia-l4t-bootloader \ nvidia-l4t-configs \ nvidia-l4t-gputools \ nvidia-l4t-initrd \ nvidia-l4t-jetson-io \ nvidia-l4t-oem-config \ nvidia-l4t-tools sudo ldconfig vulkaninfo --summary # 여기서 GPU(NVIDIA Tegra X1 (nvgpu))가 정상 인식되는지 확인 sudo apt-get install -y libvulkan-dev libvulkan1 sudo apt-get install -y nvidia-l4t-libvulkan |
glslang 설치
| cd ~ git clone https://github.com/KhronosGroup/glslang.git cd glslang python3 update_glslang_sources.py mkdir build && cd build export LDFLAGS="-lstdc++fs" /opt/cmake/bin/cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9 make -j$(nproc) sudo make install which glslangValidator |
shaderc 설치
| cd ~ git clone https://github.com/google/shaderc.git cd shaderc python3 utils/git-sync-deps mkdir build && cd build export LDFLAGS="-lstdc++fs" /opt/cmake/bin/cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9 \ -DSHADERC_SKIP_TESTS=ON -DSHADERC_SKIP_EXAMPLES=ON \ -DSPIRV_SKIP_EXECUTABLES=ON make glslc_exe -j$(nproc) sudo cp glslc/glslc /usr/local/bin/ which glslc glslc --version |
vulkan 관련 헤더 SPIRV 설치
| cd ~ git clone https://github.com/KhronosGroup/SPIRV-Headers.git cd SPIRV-Headers mkdir build && cd build /opt/cmake/bin/cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local sudo make install |
cmake version 3.31.8 설치
| /opt/cmake/bin/cmake .. -DGGML_VULKAN=ON -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9 -DCMAKE_C_FLAGS="-Wno-error" |
아래는 빌드시 문제가 되서 수정한 부분
| $ git status On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: ../../ggml/src/ggml-cpu/ggml-cpu-impl.h modified: ../../tools/ui/CMakeLists.txt no changes added to commit (use "git add" and/or "git commit -a") jetson@jetson-desktop:~/src/llama.cpp/build/bin$ git diff diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index 5d1ca5ffc..f39d56694 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -296,12 +296,28 @@ inline static uint8x16_t ggml_vqtbl1q_u8(uint8x16_t a, uint8x16_t b) { #define ggml_vld1q_s16_x2 vld1q_s16_x2 #define ggml_vld1q_u8_x2 vld1q_u8_x2 -#define ggml_vld1q_u8_x4 vld1q_u8_x4 #define ggml_vld1q_s8_x2 vld1q_s8_x2 -#define ggml_vld1q_s8_x4 vld1q_s8_x4 #define ggml_vqtbl1q_s8 vqtbl1q_s8 #define ggml_vqtbl1q_u8 vqtbl1q_u8 +inline static uint8x16x4_t ggml_vld1q_u8_x4(const uint8_t * ptr) { + uint8x16x4_t res; + res.val[0] = vld1q_u8(ptr + 0); + res.val[1] = vld1q_u8(ptr + 16); + res.val[2] = vld1q_u8(ptr + 32); + res.val[3] = vld1q_u8(ptr + 48); + return res; +} + +inline static int8x16x4_t ggml_vld1q_s8_x4(const int8_t * ptr) { + int8x16x4_t res; + res.val[0] = vld1q_s8(ptr + 0); + res.val[1] = vld1q_s8(ptr + 16); + res.val[2] = vld1q_s8(ptr + 32); + res.val[3] = vld1q_s8(ptr + 48); + return res; +} + #endif // !defined(__aarch64__) #if !defined(__ARM_FEATURE_DOTPROD) diff --git a/tools/ui/CMakeLists.txt b/tools/ui/CMakeLists.txt index 74bca417e..488fdc0be 100644 --- a/tools/ui/CMakeLists.txt +++ b/tools/ui/CMakeLists.txt @@ -105,3 +105,5 @@ endif() target_include_directories(${TARGET} PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ) + +target_link_libraries(llama-ui-embed PRIVATE stdc++fs) |
git log. 일단 현시점 최신 버전인 b10068, 2026년 7월 18일자 소스
| commit 571d0d540df04f25298d0e159e520d9fc62ed121 (HEAD -> master, tag: b10068, origin/master, origin/HEAD) Author: Ruixiang Wang <wangruixiang07@outlook.com> Date: Sat Jul 18 15:02:18 2026 +0200 |
클로드 만세!!! string 머시기 없다고 파이썬으로 해치워 버림
| cd ~/src/llama.cpp python3 << 'PYEOF' path = "ggml/src/ggml-cpu/ggml-cpu-impl.h" with open(path, "r") as f: content = f.read() old = """#define ggml_vld1q_s16_x2 vld1q_s16_x2 #define ggml_vld1q_u8_x2 vld1q_u8_x2 #define ggml_vld1q_u8_x4 vld1q_u8_x4 #define ggml_vld1q_s8_x2 vld1q_s8_x2 #define ggml_vld1q_s8_x4 vld1q_s8_x4 #define ggml_vqtbl1q_s8 vqtbl1q_s8 #define ggml_vqtbl1q_u8 vqtbl1q_u8""" new = """#define ggml_vld1q_s16_x2 vld1q_s16_x2 #define ggml_vld1q_u8_x2 vld1q_u8_x2 #define ggml_vld1q_s8_x2 vld1q_s8_x2 #define ggml_vqtbl1q_s8 vqtbl1q_s8 #define ggml_vqtbl1q_u8 vqtbl1q_u8 inline static uint8x16x4_t ggml_vld1q_u8_x4(const uint8_t * ptr) { uint8x16x4_t res; res.val[0] = vld1q_u8(ptr + 0); res.val[1] = vld1q_u8(ptr + 16); res.val[2] = vld1q_u8(ptr + 32); res.val[3] = vld1q_u8(ptr + 48); return res; } inline static int8x16x4_t ggml_vld1q_s8_x4(const int8_t * ptr) { int8x16x4_t res; res.val[0] = vld1q_s8(ptr + 0); res.val[1] = vld1q_s8(ptr + 16); res.val[2] = vld1q_s8(ptr + 32); res.val[3] = vld1q_s8(ptr + 48); return res; }""" assert old in content, "패턴을 못 찾음 - 파일 확인 필요" content = content.replace(old, new) with open(path, "w") as f: f.write(content) print("패치 완료") PYEOF |
llama.cpp vulkan 활성화 해서 빌드.
-j4 하고 싶은데 두번 정도 메모리 엄청 먹으면서 하나 빌드하는게 있어서 늦더라도 -j1 추천
| cd ~/src/llama.cpp mkdir -p build && cd build rm -rf * export LDFLAGS="-lstdc++fs" /opt/cmake/bin/cmake .. -DGGML_VULKAN=ON \ -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9 \ -DCMAKE_C_FLAGS="-Wno-error" make llama-cli llama-server -j1 |
그렇게 빌드된 녀석을 qwen3.5-0.8B-Q4 돌리면!
| $ ./llama-cli -m ~/llm/Qwen3.5-0.8B-Q4_0.gguf --chat-template-kwargs "{\"enable_thinking\": false}" -c 4096 -ngl 99 -fa on Loading model... ▄▄ ▄▄ ██ ██ ██ ██ ▀▀█▄ ███▄███▄ ▀▀█▄ ▄████ ████▄ ████▄ ██ ██ ▄█▀██ ██ ██ ██ ▄█▀██ ██ ██ ██ ██ ██ ██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀ ██ ██ ▀▀ ▀▀ build : b10068-571d0d540 model : /home/jetson/llm/Qwen3.5-0.8B-Q4_0.gguf ftype : Q4_0 modalities : text available commands: /exit or Ctrl+C stop or exit /regen regenerate the last response /clear clear the chat history /read <file> add a text file /glob <pattern> add text files using globbing pattern > 안녕? 안녕하세요! 어시, 어떻게 도와드릴 수 있을까요? [ Prompt: 21.4 t/s | Generation: 9.1 t/s ] > 안녕? 안녕하세요! 어시, 어떻게 도와드릴 수 있을까요? [ Prompt: 23.0 t/s | Generation: 9.1 t/s ] > 너에 대해 소개 안녕하세요! 저는 인공지능(AI) 기술의 능력을 활용하여 정보를 제공하거나 논리적 사고를 도와줄 수 있는 **공급 서비스 봇 (Assistant)**입니다. 나는 다음과 같은 역할을 수행할 수 있습니다: * **정보 제공**: 지식 기반의 정보를 검색하고 요약 또는 정리해 줄 수 있습니다. * **논리적 분석**: 문장 구조나 논리 논리를 분석하여 설명을 돕습니다. * **문제 해결**: 질문에 답하거나 상황을 분석할 수 있습니다. * **대화 및 학습**: 대화와 학습을 통해 사용자 경험을 개선해 줍니다. 이러한 기능을 통해 **AI**를 대신할 수 있는 인간과 유사한 능력으로 **사용자**에게 도움을 줄 수 있습니다. 어떤 내용을 원하시는가요? (예: 답변, 설명, 대화, 학습 자료 등) [ Prompt: 21.8 t/s | Generation: 8.5 t/s ] > 코드 작성 python hello world 출력 네, 안녕하세요! 저는 인공지능(AI) 기술의 능력을 활용하여 정보를 제공하거나 논리적 사고를 도와드릴 수 있는 서비스 봇입니다. 제대안은 **Python**을 사용하여 `print` 함수로 `hello world`를 출력하는 코드를 작성해 드립니다. ```python print("hello world") ``` 이 코드를 실행하면 다음 문장이 출력됩니다: `hello world` 혹시 다른 언어 (예: JavaScript, Java 등) 의 `hello world` 예제를 작성하고 싶으시다면 말씀해 주세요! [ Prompt: 37.1 t/s | Generation: 8.4 t/s ] |
jtop 에서 GPU 잘 올라간다. ㅋㅋㅋ
메모리는 1.2G / 3.9G. 잘하면 2G 모델에서도 돌아가겠는데?

요건 사용하지 않을때 GPU 정보. 76.8MHz 까지 떨어지다니 ㄷㄷ

혹시나 몰라서 동일 조건에서 gpu 사용하지 않도록 ngl 0 으로 하고 테스트
| $ ./llama-cli -m ~/llm/Qwen3.5-0.8B-Q4_0.gguf --chat-template-kwargs "{\"enable_thinking\": false}" -c 4096 -ngl 0 -fa on Loading model... ▄▄ ▄▄ ██ ██ ██ ██ ▀▀█▄ ███▄███▄ ▀▀█▄ ▄████ ████▄ ████▄ ██ ██ ▄█▀██ ██ ██ ██ ▄█▀██ ██ ██ ██ ██ ██ ██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀ ██ ██ ▀▀ ▀▀ build : b10068-571d0d540 model : /home/jetson/llm/Qwen3.5-0.8B-Q4_0.gguf ftype : Q4_0 modalities : text available commands: /exit or Ctrl+C stop or exit /regen regenerate the last response /clear clear the chat history /read <file> add a text file /glob <pattern> add text files using globbing pattern > 안녕? 안녕하세요! 네, 알겠습니다. 저는 인공지능으로 대화하고 정보를 제공해 드릴 수 있는 도구입니다. 무엇을 도와드릴까요? 😊 [ Prompt: 5.9 t/s | Generation: 3.3 t/s ] > 너에 대해 소개해줘 안녕하세요! 네, 알겠습니다. 저는 인공지능으로 대화하고 정보를 제공해 드릴 수 있는 도구입니다. 무엇을 도와드릴까요? 😊 [ Prompt: 9.2 t/s | Generation: 3.3 t/s ] > 파이썬으로 현재 디렉토리 목록 보는 프로그램 작서앻줘ㅏ 프라이썬으로 현재 디렉토리 목록을 보고 싶으신가요? 😊 이제 바로 `dir` 명령어에 대한 설명부터 실행 방법까지 알려드릴게요. ### 📂 디렉토리 목록을 표시하는 명령어 프라이썬에서 파일이나 디렉토리를 표시하려면 먼저 `dir` 명령어를 사용합니다. ```bash cd <디렉토리명> ``` 예를 들어, `C:\Users\박\Documents`를 표시하려면: ```bash cd C:\Users\박\Documents ``` **단순히 `dir`을 입력하면 현재 디렉토리를 표시할 수 있습니다.** --- ### 🛠️ 실행 방법 #### 1. **프라이썬을 실행하기** 프라이썬은 웹 브라우저로 작동하는 프로그램으로, 브라우저에서 직접 실행해 볼 수 있습니다. **단순 브라우저에서 실행하기:** * **Chrome/Edge/ChromeOS:** `https://www.python.org/` 에서 `dir` 명령어 추가하기 (F12 또는 `F11`를 누ار) * **Mac OS:** `Finder` → `Extensions` → `File Explorer` → `Python` → `dir` **프라이썬을 설치하기:** 1. `https://www.python.org/` 에서 `Install Python` 클릭 2. 설치 후 `~` 경로에 추가되면, 브라우저에서 `file://` 주소창을 입력하고 입력한 URL 을 보시면 됩니다. --- ### 💻 기본 실행 예시 ```python # 위 설명에서 예시처럼, 현재 디렉토리를 확인 dir ``` 혹시 특정 파일이나 디렉토리를 찾으셨다면 `dir` 대신 `find` 명령어도 사용할 수 있습니다. ```bash find <디렉토리명> -name "파일명" ``` 어떤 작업을 하되든 프라이썬이 도와드릴게요! 😊 [ Prompt: 10.0 t/s | Generation: 3.1 t/s ] |
어.. 그래도 2.7배. 약간 과장하면 3배 상승이네?
'embeded > jetson' 카테고리의 다른 글
| jetson nano jtop (0) | 2026.07.20 |
|---|---|
| jetson nano 4GB / qwen3.5 0.8B (0) | 2026.07.20 |
| jetson nano 과 llama.cpp (가속, 빌드 포기) (0) | 2026.07.20 |
| jetson nano devloper kit SD card image(A02) (0) | 2026.07.20 |
| jetracer donkey car (0) | 2026.04.20 |
