13편 끝에서 이렇게 물었다. 이 낡은 폰에서 AI 모델을 직접 돌리면, 전기와 탄소로 따져 클라우드 GPU보다 얼마나 나쁜가?

출발점은 2026년 7월에 나온 논문 “The Battery Price of Edge AI”(Guégain·Coignion, arXiv 2609.11940)다. 이 논문은 iPhone 14와 Pixel 8에서 llama.cpp로 작은 모델을 돌려 A100 서버와 비교했다. 결론은 폰 추론의 수명주기 환경 영향이 서버보다 57배 크고, 그중 8890%가 기기를 만들 때 나온 탄소라는 것이다. 이 계산은 새 폰을 전제로 한다. 서랍 속 폰을 다시 쓰면 제조 탄소는 새로 생기지 않는다. 그러면 결론이 뒤집힐까?

재사용 폰의 탄소를 다룬 연구로는 Junkyard Computing(Switzer 외, ASPLOS ‘23)이 있다. 버린 Pixel 3A 여러 대로 호텔 예약 웹 서비스를 돌렸고, 요청당 탄소가 일반 서버보다 낮았다. LLM 추론은 다루지 않았다. 이 글은 그 빈칸을 잰다.


1. 결론부터

같은 모델(Qwen2.5-0.5B-Instruct, Q4_0)로 글자 조각(토큰) 1,000개를 생성할 때 나오는 탄소다. 단위는 mgCO2e이고, 전력망은 논문과 같은 세계 평균이다.

폰의 제조 탄소를 어떻게 셀까이 폰Colab T4폰 ÷ T4
(a) 0으로 친다(재사용)187792.4배
(b) 두 번째 사용 기간의 몫240~24779약 3배
(c) 논문 방식(배터리 사이클)1,463~1,6457919배
  • 재사용으로 보면 차이가 19배에서 2.4배로 줄어든다. 하지만 뒤집히지는 않는다.
  • 프롬프트를 읽는 단계(입력 처리)에서는 GPU가 16~21배 낫다.
  • 폰이 이긴 경우가 하나 있었다(7절). 폰에 유리한 가정이 모두 겹친 경우다.

2. 어떻게 쟀나

폰

  • 기기: Galaxy Note FE. 2017년에 나왔지만 칩은 2016년의 Exynos 8890이다. 켜져 있는 코어는 Cortex-A53 4개와 Mongoose M1 2개다. ARMv8.0 CPU라서 최근 폰 CPU에 있는 8비트 내적 명령(dotprod)이 없다.
  • 엔진과 모델: proot 우분투에서 빌드한 llama.cpp의 llama-bench로 Qwen2.5-0.5B-Instruct를 돌렸다. 압축 방식은 Q4_0, Q8_0, Q4_K_M 세 가지다. 생성은 128토큰, 프롬프트 처리는 512토큰 단위로 쟀다.
  • 센서: 배터리 칩의 누적 전하량 charge_counter를 썼다. 0.1%(3,103 µAh) 단위로 약 30초마다 갱신된다. 순간 전류 current_now는 20초에 한 번 바뀌는 평균값이어서 교차 확인에만 썼다. 에너지는 구간 전하량에 구간 평균 실측 전압을 곱해 구했다. 논문은 공칭 전압을 곱했다.
  • 절차: 5분 대기, 5분 이상 추론, 다시 5분 대기 순서로 잰다. 구간의 시작과 끝은 카운터가 갱신된 직후에 맞췄다. 순 에너지는 추론 구간 에너지에서 대기 전력 × 추론 시간을 뺀 값이다.
  • 조건: 충전기가 꺼진 방전 상태에서, 화면도 끈 채로 쟀다. 서비스는 평소대로 돌렸다. 충전기는 12편의 스마트 플러그가 끄고 켠다. 측정 중 한 번이라도 충전 상태가 보이면 그 회차는 버렸다.
  • 언제: 사람도 에이전트도 쉬는 밤 1~7시에 무인 실행기가 돌렸다. 조합마다 유효한 측정이 3회 모일 때까지 계속했고, 10월 1일, 8일, 16일 밤에 걸쳐 모두 24회를 모았다.

T4

  • 13편의 Colab CLI로 T4 런타임을 열고, 같은 GGUF 파일을 llama.cpp CUDA 빌드로 돌렸다. 폰과 같은 조건이 되도록 한 번에 요청 하나(배치 1)만 처리했다.
  • 전력은 nvidia-smi의 power.draw를 0.1초마다 기록했다. 측정 창은 5568초였고, 평균 약 65 W에 GPU 사용률은 9195%였다.
  • 잴 수 있는 것은 GPU 보드의 전력뿐이다. 서버의 나머지(CPU, 메모리, 냉각)는 논문의 가정대로 PUE 1.56과 GPU 밖 IT 부하 1.14배를 곱해 넣었다.

탄소

  • 전력망: 논문과 같은 0.46 gCO2e/Wh(2023년 세계 평균)를 기본으로 썼다. 한국 값 0.4173(2023년, 2025년 12월 공표)으로도 한 번 더 계산했다.
  • 폰의 전기: 배터리에서 나간 에너지를 충전 효율 0.8로 나눴다. 0.8은 논문의 값이다.
  • 폰의 제조 탄소: Note FE의 공개 값을 찾지 못해 논문에 나온 두 폰의 값(48,190~55,080 g)을 범위로 썼다. 이 탄소를 나누는 방법은 세 가지로 잡았다.
    • (a) 재사용: 0으로 본다. 첫 주인이 이미 치렀다고 보는 것이다.
    • (b) 사용 기간의 몫: 첫 사용 3년과 두 번째 사용 3년(가정) 가운데 두 번째 몫만 센다.
    • (c) 논문 방식: 배터리가 1,000번 충방전하면 폰을 바꾼다고 보고, 추론이 쓴 배터리만큼 제조 탄소를 떠안긴다.
  • 서버의 제조 탄소: T4의 값이 없어서 논문의 A100 서버 값(A100 180 kg + DGX 호스트의 1/8)을 그대로 썼다. 이 값을 3년, 가동률 0.8로 나눴다. T4는 더 작은 보드이므로 이 가정은 폰에 유리하다.

3. 측정을 가장 크게 흔든 것은 옆의 에이전트였다

9월 29일 저녁에 첫 시험을 했을 때 대기 전력은 2.4 W와 2.2 W였다. 조용한 밤에 이 폰은 0.5 W 안팎을 쓴다. 그때 같은 폰에서 Claude Code가 일하고 있었다(11편). 에이전트가 하는 일의 양이 구간마다 달라서 대기 전력을 빼는 계산이 흔들렸다.

그래서 본측정은 밤에 무인으로 돌렸다. Claude Code 프로세스가 CPU를 5% 넘게 쓰면 실행기가 기다리게 했다.

그런데 10월 9일부터 15일까지 이레 동안 한 건도 세지 못했다. 열어 둔 채 쉬고 있던 Claude Code 세션이 CPU를 5~7% 썼기 때문이다(일주일 평균 6.9%). 실행기는 매일 밤 busy: agent session active를 남기고 기다렸다.

그 사이 기준을 넘긴 채 잰 한 건이 있다. 10월 12일 밤의 Q4_K_M 생성이고, 에이전트 CPU는 7.2%였다. 이 기록을 보면 기준이 왜 필요한지 알 수 있다.

Q4_K_M 생성대기 전력생성 속도
에이전트가 쉬던 세 번0.51~0.54 W4.09~4.32 t/s
10월 12일(에이전트 7.2%)1.10 W3.76 t/s

대기 전력은 두 배였고, 속도는 8~13% 낮았다. 이 건은 결과에서 뺐다. 세션을 닫자 10월 16일 밤에 남은 8회가 모두 끝났다. 그날 밤 에이전트 CPU는 모든 측정에서 0%였다.

4. 폰의 토큰당 에너지

조합마다 밤 측정 3회의 평균이다. 모두 4스레드로 돌렸고, 2스레드와 6스레드는 따로 적었다. 총 J/token은 측정 구간 전체의 에너지이고, 순 J/token은 대기 전력을 뺀 값이다.

조합총 J/token순 J/tokent/s
Q4_0 생성1.174 ± 0.0081.0736.06
Q8_0 생성1.422 ± 0.0741.2954.96
Q4_K_M 생성1.620 ± 0.0181.4874.24
Q4_0 생성, 2스레드1.241 ± 0.0111.1104.78
Q4_0 생성, 6스레드0.722 ± 0.1270.4102.15
Q4_0 프롬프트0.259 ± 0.0260.23829.6
Q8_0 프롬프트0.249 ± 0.0230.23030.9
Q4_K_M 프롬프트0.329 ± 0.0150.30423.9
  • 생성은 Q4_0이 가장 싸다. 순 에너지가 Q8_0보다 17%, Q4_K_M보다 28% 적다. Q4_K_M 같은 K 계열 압축은 dotprod 없는 CPU에서 불리할 것이라고 예상했는데, 결과도 그랬다.
  • 프롬프트 처리는 Q4_0과 Q8_0이 오차 안에서 같다. Q4_K_M만 약 30% 비싸다.
  • 4스레드가 가장 빠르다. 6스레드는 에너지가 적지만 2.8배 느리다. 6스레드 측정 동안 큰 코어의 평균 속도는 940 MHz로, 다른 측정(1,800~2,300 MHz)의 절반이었다. 일을 6개로 똑같이 나누면 느린 작은 코어 4개가 병목이 된다. 큰 코어는 제 몫을 먼저 끝내고 논다.
  • 밤 대기 전력은 0.480.81 W였다. 프롬프트 처리의 편차가 9%대로 큰 것은 첫 밤의 측정 구간이 2.53.5분으로 짧았기 때문으로 보인다. 그 뒤로는 구간을 5분 이상으로 잡았다.

5. T4와 나란히

T4에서는 1분 창으로 쟀다. 아래는 보드 전력만으로 계산한 값이다.

압축생성 t/s생성 J/token프롬프트 t/s프롬프트 J/token
Q4_02850.2369,3110.0071
Q8_02300.2909,1310.0073
Q4_K_M2650.2618,7220.0076

Q4_0 생성으로 두 기기를 비교하면 이렇다.

  • 속도: T4가 초당 285토큰, 폰이 6.1토큰이다. 47배 차이다.
  • 전기: T4에 서버 몫(1.56 × 1.14)을 곱하면 토큰당 0.42 J이다. 폰은 충전 손실까지 넣으면 1.47 J이다. 전기만으로 3.5배 차이가 난다.

6. 탄소로 바꾸면

1절의 표는 Q4_0 생성에 대한 것이다. T4의 79 mg은 전기 54 mg과 서버 제조 탄소의 몫 25 mg을 더한 값이다. 다른 조합도 재사용 시나리오(a)로 보면 결과가 같다.

  • 생성은 폰이 1.5~3.0배 많이 낸다.
  • 프롬프트 처리는 16~21배 많이 낸다.

한국 전력망으로 바꿔도 비율은 거의 그대로다(Q4_0 생성 2.3배). 전기 항이 양쪽에 똑같이 곱해지기 때문이다.

재사용 폰(a)이 T4를 이기려면 아래 둘 중 하나가 필요하다(Q4_0 생성, 4스레드 기준).

  • T4 서버의 가동률이 15% 아래: 서버가 85% 넘는 시간을 놀면 제조 탄소가 적은 토큰에 나뉘어 토큰당 몫이 커진다.
  • 전력망이 86 g/kWh보다 깨끗함: 한국 전력망(417 g/kWh)보다 다섯 배쯤 깨끗해야 한다.

프롬프트 처리에서는 이 경계가 가동률 1.5%, 전력망 9 g/kWh로 훨씬 멀다.

재사용이 결론을 뒤집지 못하는 이유는 간단하다. 논문의 계산에서 폰의 가장 큰 짐은 제조 탄소다. 재사용하면 그 짐은 사라지지만, 전기에서 이미 3.5배 차이가 난다. 반면 서버의 제조 탄소는 초당 285토큰 × 3년 × 가동률 80%에 나뉘어 토큰마다 아주 얇게 붙는다.

7. 폰이 이긴 단 한 경우

Q4_0 생성을 6스레드로 돌리고, 순 에너지로 따진 경우다. 순 에너지는 폰이 어차피 하루 종일 켜져 있을 때 추론이 보태는 몫이다. 이 폰처럼 서버로 쓰는 폰이라면 이렇게 세는 것이 맞다.

  • 폰 65 mg, T4 79 mg으로 폰이 17% 적다. T4의 가동률이 얼마든 폰이 이기고, 전력망이 974 g/kWh보다 깨끗하면 이긴다.
  • 대가는 속도다. 초당 2.1토큰으로 4스레드보다 2.8배 느리고, T4보다 133배 느리다.
  • 승패도 가정에 달려 있다. T4의 제조 탄소가 여기서 쓴 A100 서버 값의 절반이라면 T4가 66 mg이 되어 비긴다. 같은 조합의 총 에너지 편차도 ±0.127로 크다.

같은 순 에너지로 따져도 4스레드는 171 mg으로 T4의 2.2배다. 결국 폰에 유리한 가정이 모두 겹쳐야 겨우 이긴다.

한계

  • 폰 한 대, 모델 하나(0.5B)로만 쟀다. 더 큰 모델이나 다른 폰에서는 다를 수 있다.
  • T4는 배치 1만 쟀다. 여러 요청을 묶어 처리하면 T4의 토큰당 에너지는 더 내려갈 것으로 보이지만, 재지는 않았다.
  • T4의 제조 탄소는 A100 서버 값을 빌려 썼다. 폰에 유리한 가정이다.
  • Note FE의 제조 탄소는 공개된 값이 없다. 다만 (a) 재사용 시나리오는 이 값과 상관없다.
  • T4 쪽은 보드 전력에 논문의 계수를 곱한 값이다. Colab이 실제로 도는 데이터센터의 PUE는 모른다.
  • 양쪽이 같은 GGUF 파일을 썼으므로 같은 압축끼리는 출력 품질이 같다. 압축 방식 사이의 품질 차이(perplexity)는 재지 않았다.

정리

  1. 버려질 폰을 다시 써도 AI 추론에서는 클라우드 GPU보다 탄소가 적지 않았다. 제조 탄소를 0으로 쳐도 생성은 2.4배, 프롬프트 처리는 16배 넘게 냈다.
  2. 재사용은 차이를 19배에서 2.4배로 줄인다. “제조 탄소가 대부분"이라는 논문의 결론은 새 폰에서는 맞다. 재사용 폰에서는 전기 효율의 차이가 남는다.
  3. 폰이 이긴 경우는 유리한 가정이 다 겹칠 때뿐이었다. 그때도 차이는 17%였고, 속도는 133분의 1이었다.
  4. 폰에서 에너지를 잴 때는 옆에서 쉬는 에이전트부터 끄자. 쉬고 있는 세션 하나가 대기 전력을 두 배로 만들었다.

그래서 폰 서버는 어디에 맞나

두 결과를 나란히 놓아 보자. Junkyard Computing에서 가벼운 웹 서비스는 재사용 폰이 이겼다. 여기서 재 본 AI 계산은 GPU가 이겼다. 폰 서버에는 가볍고 늘 켜져 있어야 하는 일이 맞고, 무거운 계산은 빌려 쓰는 편이 낫다.

이 폰이 지금 하는 서버 일은 블로그, 문서 서버, 에이전트 세션이다. 방전 중 기록으로 보면 하루 평균 0.460.67 W를 썼다(10월 819일). 13편에서 GPU를 직접 갖지 않고 Colab에서 빌리기로 한 것도, 숫자로 보니 맞는 선택이었다.

연재를 마치며

이 글로 연재를 마친다.

9월 중순, 서랍 속 Galaxy Note FE에 우분투를 올리는 데서 시작했다(1편). 그 위에 블로그를 띄우고, 도메인 없이 고정 주소를 얻고, 사람이 없어도 서비스가 살아 있도록 감시 데몬을 붙였다(27편). 그다음 tailnet 안에서만 열리는 문서 서버와 편집기, 폰과 GitHub Pages에 함께 올리는 배포, 터미널을 닫아도 이어지는 에이전트 세션, 배터리를 지키는 스마트 플러그, GPU를 빌려 오는 Colab CLI를 차례로 더했다(813편).

연재 내내 남은 질문은 “왜 하필 낡은 폰인가"였다. 이 글의 숫자가 답의 한쪽이다. 낡은 폰은 무거운 계산에서 빌린 GPU를 이기지 못한다. 대신 가벼운 일을 1 W도 안 되는 전력으로 늘 켜 둔 채 돌린다. 새 기기를 사지 않고 그런 일을 맡길 수 있다는 것이 낡은 폰을 쓰는 이유이고, 그 이상을 기대할 기기는 아니다.