안녕하세요. 지난번 Edge Device 환경에서 Bitnet.cpp를 돌리고자 했지만 실패했었습니다.
이번에 많은 프로젝트를 진행하면서 cpp 빌드도 많이 돌려봤는데요, 환경설정이 가장 어려웠습니다.
그럴때마다 도커 컨테이너 내에 cpp를 빌드시키고 그 컨테이너 주소를 사용하여 환경설정을 편하게 구축하고
또 그렇게 편해진 상황에서 온전히 프로젝트를 진행할 수 있었습니다.
https://uno-kim.tistory.com/443
#4. BitNet과 A35의 한계.. 갤럭시 A35 x BitNet.cpp (실패기이자 학습기)
결론 : 멍멍이 같이 실패... 내가 직접 Termux + Android + A35(Exynos 1380) 환경에서BitNet-b1.58-2B-4T(i2_s)를 빌드부터 실행까지 끝까지 밀어붙인 실전 기록이다.결론부터 말하면: BitNet i2_s는 “빌드는 성공할
uno-kim.tistory.com
이렇게 빌드를 하다가 실패 또는 성공했어도 헛소리 또는 막 폭주하는 상황이 있었습니다.
그래서 한번 온전하게 폐쇄된 환경을 구축하고 그 컨테이너 안에서 빌드하는것으로 진행해보겠습니다.
1. 안드로이드 + Termux 환경에서 도커가 사용가능한가?
https://uno-kim.tistory.com/452
[Termux] Termux + PRoot 환경과 Docker 비교 분석
모바일환경 또는 안드로이드 환경에서 도커를 띄우고 해당 컨테이너 안에서 작업을 하면 어떨까 라는 물음에서 출발했습니다.결론부터 말씀드리자면 루팅없이는 힘들것 같습니다. 왜냐면 커널
uno-kim.tistory.com
A35 또는 순정 안드로이드에서는 커널권한이 잠겨있습니다. 진짜 Docker 데몬을 네이티브로 바로 띄우는 것은 불가능합니다.
이를 억지로 열려면 루팅을 하는 방법도 있지만 아직은 그렇게까지 하고싶지않습니다.
대신 도커 컨테이너를 띄우는 것과 비슷하게 격리된 클린 리눅스 환경을 내면서 안전하게 구동시킬 수 있는
Termux + PRoot Ubuntn 환경 구축
체감상 도커 안에서 작업하는 것과 100% 동일합니다.
2. 진행
왠만하면 sshd띄워서하세요 편합니다..
https://uno-kim.tistory.com/453
[Termux] 스마트폰의 터미널환경에 무선으로 접속하기 (SSHD)
안녕하세요. 스마트폰의 터미널 환경에 무선으로 접속하는 방법에 대해서 알려드리겠습니다.현재 가장 많이 사용하고 있는 scrapy 를 이용해서 스마트폰과 노트북을 usb 유선으로 연결하여 화면
uno-kim.tistory.com
꼭 좀 참고해주세요!
격리된 Ubuntu 컨테이너(PRoot) 띄우기
# 1. Termux 기본 패키지 업데이트 및 proot-distro 설치
pkg update && pkg upgrade -y
pkg install proot-distro -y
# 2. 격리된 Ubuntu 환경 설치 (이게 도커 이미지를 pull 하는 것과 같습니다)
proot-distro install ubuntu
# 3. Ubuntu 환경으로 접속 (도커의 exec -it bash 와 같은 역할)
proot-distro login ubuntu

이러면 설치후 proot 환경으로 들어갑니다.

완료된 모습니다.! root@localhost :~# <<<이게 나와야합니다.!!
필수 빌드 도구 셋업 (도커파일의 RUN 역할?!)
우분투 안에서 bitnet.cpp 빌드에 필요한 도구들을 설치합니다.
apt update && apt upgrade -y
apt install -y git build-essential cmake python3

설치가 문제없이 된것같습니다.
그리고 파이썬 구버전 저장소가 안타깝게도 PC환경에서만 지원하고 갤럭시 A35와 같은 모바일 ARM64 아키텍처용 설치파일은 제공하고 있지 않습니다...
그래서 apt 가 무리 파이썬 3.10을 버전을 발견못해서 다른 방법을 써야합니다.
바로 모바일 기기에서 원하는 버전의 파이썬을 가장 완벽하고 깔끔하게 띄울수 있는 치트키인
Miniforge(Conda)
Miniforge 설치 파일 다운로드 및 실행
cd ~
apt install -y wget
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
# 다운로드한 스크립트로 조용히(-b) 설치 진행
bash Miniforge3-Linux-aarch64.sh -b -p $HOME/miniforge3

Conda 활성화 및 Python 3.10 환경 생성
# Conda 환경으로 진입 (프롬프트 앞에 (base)가 생깁니다)
source $HOME/miniforge3/bin/activate
# 파이썬 3.10 버전을 콕 집어서 'myenv310' 이라는 환경 생성 (-y는 자동 yes)
conda create -n myenv310 python=3.10 -y
# 방금 만든 3.10 환경으로 접속! (프롬프트 앞에 (myenv310)이 생깁니다)
conda activate myenv310

뭔가 장관입니다 ㅎㅎㅎ멋지더라구요
모두 끝났으면 이제 마지막으로 버전과 설치 ㅈ경로를 확인해봅시다.
#아레에서 경로가 /root/miniforge3/envs/myenv310/bin/python 으로 나오면 성공!
which python
python --version

bitnet.cpp 클론 및 빌드
mkdir workspace
cd workspace
# 1. 소스 코드 다운로드
git clone --recursive https://github.com/microsoft/BitNet.git
cd BitNet
#설치하세요...
pip install -r requirements.txt
#허깅페이스 설치....
pip install huggingface_hub
huggingface-cli download microsoft/BitNet-b1.58-2B-4T-gguf --local-dir models/BitNet-b1.58-2B-4T
python setup_env.py -md models/BitNet-b1.58-2B-4T -q i2_s
여기까지 가 진짜 큰난관이 있습니다...... 저번 비트넷때도 이랬었고 방법을 몰랐는데ㅠㅠ잘되기를 기도합니다.
여기서!!!
Termux 환경 또는 PRoot에서 파이썬 달랑 설치하고 덤비면 큰일납니다!!
우선 넘파이와 torch 설치에서 막힙니다... 넘파이는 너무오래걸리고 왜 PC에선 되고 안드로이드에선 안되었을까ㅠㅠ
- PC (x86_64): 서버에 미리 컴파일된 파일이 있어 다운로드만 하면 끝납니다.
- Android (ARM64) / PRoot: 많은 라이브러리가 ARM64용 바이너리를 미리 준비해두지 않습니다. 이 경우 pip는 소스 코드(.tar.gz)를 통째로 내려받아 사용자 기기(A35)에서 직접 컴파일하기 시작합니다.
- 결과: A35의 CPU 자원을 풀가동해서 C/C++ 코드를 빌드하느라 수 분에서 수십 분이 걸리는 것입니다. 아까 Numpy가 오래 걸렸다면 바로 이 과정을 거친 겁니다.
왜 Torch(PyTorch)는 아예 안 될까? (바이너리의 부재)
Torch는 일반 라이브러리와 급이 다릅니다. 수백만 줄의 C++, CUDA, 그리고 하드웨어 가속 코드가 얽혀 있습니다.
- 의존성 지옥: Torch를 빌드하려면 MKL, OpenBLAS, LibTorch 등 안드로이드 순정 환경이나 PRoot 표준 저장소에 없는 특수한 라이브러리들이 잔뜩 필요합니다.
- 복잡도: 폰의 CPU만으로는 Torch 전체를 컴파일하는 데 몇 시간이 걸릴 수도 있고, 그 과정에서 메모리 부족(OOM)으로 무조건 터집니다.
- 공식 지원 제외: PyTorch 팀은 "리눅스 ARM64(서버용)"은 지원하지만, "안드로이드 리눅스 환경"은 공식 배포판에 포함하지 않습니다. 그래서 pip가 아무리 찾아도 "너한테 맞는 파일은 세상에 없어"라며 포기하는 겁니다.
PRoot 환경의 태생적 한계
PRoot는 "사용자 공간 에뮬레이션"입니다.
- 시스템 콜을 가로채는 과정에서 발생하는 오버헤드 때문에, 복잡한 라이브러리가 하드웨어 기능을 직접 부르려고 하면 PRoot 레이어에서 충돌이 나거나 권한 문제로 거부될 수 있습니다.
- 즉, OS 커널 수준의 지원이 필요한 고성능 라이브러리(Torch의 가속 기능 등)는 PRoot라는 "가짜 루트" 환경을 금방 눈치채고 작동을 멈추기도 합니다.
이렇게 또 공부를 하게되네요...

우리를 괴롭히던 친구들이 어느덧 끝나고있습니다... 비트넷cpp 너란녀석 정말 어렵다...

무사히 넘어가고 꺼프파일 다운로드중이에요
구프??지유엪? 꺼프??
- Full Name: GPT-Generated Unified Format
- 읽는 법: 보통 한국 개발자들 사이에서는 "구프"라고 편하게 읽습니다.
(영어권에서도 'Guh-f' 혹은 'G-G-U-F'라고 부릅니다.)
대망의 빌드.....기도 꾸욱...
지금 현재 setup_env.py 스크립트가 알아서 cmake와 make -j4 과정을 백그라운드에서 열심히 실행해주고 있기 때문에 오래걸립니다.
INFO:root:Compiling the code using CMake. 메시지가 바로 그 증거
PC가 아닌 스마트폰의 모바일 CPU(Exynos 1380)로 거대한 AI 엔진을 밑바닥부터 조립(컴파일)하고 있기 때문에 10분에서 20분 이상 꽤 오래 걸리는 것이 지극히 정상입니다.
화면이 꺼지거나 앱이 종료되지 않게만 잘 유지해 주시고 여유롭게 기다려주세요.
기나긴 인내의 시간이 끝나고 마침내 터미널에 다시 입력창((myenv310) root@localhost:~/workspace/BitNet#)이 깜빡인다면, 환경 세팅과 컴파일이 모두 끝난 것입니다.

오... 되었습니다.ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ성공성공 진짜 성공은 이제 아래 명령문으로 진행하겠습니다.

python run_inference.py -m models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf -p "Hello! Who are you?" -n 200 -temp 0.7

처음 답변은 잘나아ㅗㅆ으나 또 폭주하기 시작했습니다 ㅎㅎㅎㅋㅋㅋ
중간쯤 보시면 처음 헬로! 후알유 까지는 좋았으나 또 word salad 현상이 발생했습니다 ㅠㅠ
아마도 A35의 폐쇄된 ARM 모바일 환경에서 추론 실패가 일어난것으로 우선 확인됩니다.
또 개같이 실패 ㅠㅠㅠ
왜실패했는지 좀 더 공부하고 다음 결과 보고 포스팅을 작성하겠습니다.
감사합니다....
대한민국 최초 A35 비트넷 돌린 유저가 될수있었지만 실패!
'AI Project > Edge AI Agent - LLM(연구,분석,검증)' 카테고리의 다른 글
| [분석/검증-1] BitNet.cpp 텐서 연산 붕괴(텐서 오류) 현상 분석 : Big.LITTLE 구조의 캐시 불일치 (0) | 2026.04.23 |
|---|---|
| [분석] BitNet.cpp 1.58비트 모델의 모바일 환경 추론 실패 원인 분석 (0) | 2026.04.21 |
| #4. BitNet과 A35의 한계.. 갤럭시 A35 x BitNet.cpp (실패기이자 학습기) (0) | 2026.03.23 |
| #3: BitNet.cpp 이식 및 1-bit LLM 가동 (0) | 2026.03.23 |
| #2. A35의 VS Code 서버 구축 및 텔레그램 신경망 이식 (1) | 2026.03.18 |
댓글