자, 이제 여러분들만의 인공지능을 만들어 봅시다.
이 안에서 실제 파일과 를 쓰는 환경을 확인합니다. 에 세 가지 확인 명령을 입력해 보세요. pip·계정··는 필요 없습니다.
개발 환경
은 으로 실행되는 입니다. 은 이미 설치되어 있습니다. 이번 과정은 만 사용하므로 설치·계정··가 필요 없습니다.
는 큰 에서 계산과 을 맡는 입니다. 는 지원되는 Apple 컴퓨터에서 PyTorch를 GPU로 가속하는 기능으로, 이 에서는 쓸 수 없습니다. 도 Python 계산을 할 수 있지만 일반적인 와 서비스에는 제약이 있습니다. 따라서 필수 실습 전체를 이 Alpine 터미널에서 마치고, 작은 자동미분 엔진도 직접 작성합니다.
Python 표준 라이브러리만으로 — 쓰는 모듈과 하는 일
은 pip 로 아무것도 설치하지 않습니다. Python 을 깔면 함께 오는 표준 라이브러리만 씁니다.
- : 설정··체크포인트를 로 저장하고 읽습니다.
- math: exp·log·sqrt 같은 수학 입니다.
- random: 초기값, 구간 고르기, 뽑기에 쓰는 난수입니다. 같은 면 같은 결과가 나옵니다.
- collections.Counter: 에서 붙어 있는 쌍의 횟수를 셉니다.
- pathlib: 파일을 읽고 씁니다.
- argparse: --steps 같은 옵션을 받습니다.
- hashlib: 의 지문()을 만들어 자료가 바뀌었는지 알아냅니다.
- os: 체크포인트를 안전하게 바꿔 끼웁니다().
- ·urllib: 서버와 입니다.
설치가 없으니 충돌이나 설치 실패가 없습니다. 대신 행렬 계산 라이브러리(·PyTorch)가 하던 일을 직접 짜야 합니다. 바로 그것이 이 과정의 목적입니다.
브라우저 안의 리눅스 — 무엇이 어디서 돌아가나
오른쪽 터미널은 서버에 접속한 것이 아닙니다. 이 안에서 진짜 가 돕니다.
- v86: 를 흉내 내는 입니다. 로 만들어 브라우저에서 돕니다.
- Alpine Linux 32bit: 그 가상 CPU 위에서 도는 작은 리눅스입니다. 는 512MB 입니다.
- ····: 리눅스 안에 미리 깔린 입니다.
은 학생 컴퓨터의 CPU 가 에뮬레이터를 거쳐 실행합니다. 서버로 를 보내지 않으므로 무엇을 실행해도 안전합니다. 대신 에뮬레이션이라 같은 Python 코드도 에서 직접 돌릴 때보다 훨씬 느립니다. 그래서 XSLM 의 기본 크기와 학습 횟수를 작게 잡았습니다.
~/xslm 의 파일은 이 브라우저에 저장되어 새로 고쳐도 남습니다. 실행 중이던 프로그램(Runner 등)은 새로 고치면 꺼지므로 다시 켭니다.
더 큰 모델은 어떤 도구로 만드나
XSLM 은 Python 표준 라이브러리만 씁니다. 더 큰 모델을 만들 때는 보통 아래 도구를 씁니다.
- PyTorch: 숫자 배열(텐서) 계산과 자동미분을 GPU 로 빠르게 합니다. XSLM 의 engine.py 가 하는 일입니다.
- tokenizers: 빠른 BPE 토크나이저 라이브러리입니다. 로 만들어 순수 Python 보다 100배쯤 빠릅니다. XSLM 의 tokenizer.py 가 하는 일입니다.
- numpy·tqdm: 숫자 배열과 진행 막대입니다.
- : Python 프로젝트와 패키지를 관리합니다. uv add torch 처럼 설치합니다.
- 장치(device): 계산할 곳입니다. Apple GPU 는 mps, GPU 는 , 없으면 cpu 입니다.
도구가 달라도 원리는 XSLM 과 같습니다. 도구는 같은 계산을 빠르게 해 줄 뿐입니다.
왜 느린가 — 숫자 하나씩 계산하는 비용
XSLM 의 계산은 모두 Value 하나하나의 덧셈과 곱셈입니다. 토큰 12개 구간을 한 번 학습할 때를 세어 보면 이렇습니다.
- 자리마다 query·key·value·project·expand·contract·head 로 이 일곱 번 있고, 행렬 곱 하나는 곱셈과 덧셈 수십~수백 번입니다.
- 계산 하나마다 Value 객체가 하나 생겨 에 기록됩니다. 기본 설정에서 한 번의 학습에 약 3만 2천 개가 생깁니다.
- 는 이 객체를 모두 거꾸로 한 번 더 지나갑니다.
PyTorch 는 같은 계산을 행렬 단위로 묶어 ·GPU 에서 한꺼번에 처리하므로 수백~수천 배 빠릅니다. 원리를 보려고 일부러 느린 길을 고른 것입니다. 학습이 오래 걸리면 로 멈춰도 마지막으로 끝낸 단계까지 저장되어 있습니다.
이 브라우저 리눅스에서 기본 학습 20회(python3 train.py --steps 20)를 재 보니 빠른 데스크톱(Apple M5 Max)에서 약 23초, CPU 를 4배 느리게 하면 약 2분 13초, 6배 느리게 하면 약 4분 5초 걸렸습니다. 생성(generate.py)은 각각 약 3초·17초·33초였습니다. 느린 컴퓨터라면 --steps 5 처럼 나눠 실행하세요. 체크포인트에서 이어서 학습하므로 결과는 한 번에 한 것과 같습니다.
이 과정에 필요한 Python·터미널 기초
소스를 입력하며 막히지 않도록 꼭 필요한 것만 정리합니다.
- micro 파일이름.py: 파이썬 파일을 열어 고칩니다. +S 로 저장, Ctrl+Q 로 닫습니다. Enter 를 누르면 가 다음 줄로 이어지므로, 소스보다 깊어지면 Backspace 로 줄입니다.
- nano 파일이름: settings.json·raw.txt 같은 다른 파일을 열어 고칩니다. Ctrl+O 다음 Enter 로 저장, Ctrl+X 로 닫습니다.
- python3 파일이름.py: 프로그램을 실행합니다. python3 만 치면 한 줄씩 실험하는 대화형 Python()이 열리고 exit() 로 나옵니다.
- 들여쓰기: Python 은 공백으로 블록을 나눕니다. 이 과정은 한 단계에 공백 4칸을 씁니다. Tab 과 공백을 섞으면 가 납니다.
- : from model import 는 같은 폴더의 model.py 에서 GPT 를 가져옵니다. 그래서 모든 명령을 ~/xslm 에서 실행합니다.
- if __name__ == '__main__': 파일을 직접 실행할 때만 그 아래 코드가 돕니다. 다른 파일이 import 할 때는 돌지 않습니다.
- , 메시지: 조건이 거짓이면 그 메시지로 멈춥니다. XSLM 은 잘못된 자료·설정을 일찍 잡으려고 assert 를 씁니다.
오류가 나면 의 맨 아래 줄부터 읽습니다. 마지막 줄이 오류 종류와 메시지이고, 그 위의 File … line 숫자가 문제가 난 자리입니다.
내 컴퓨터에서 더 크게 만들고 싶다면
XSLM 을 끝낸 뒤 더 큰 모델을 학습하고 싶다면 내 컴퓨터에 PyTorch 환경을 만듭니다(선택).
- Python 3.10 이상을 설치합니다.
- uv 를 설치합니다: curl -LsSf https://astral.sh/uv/install.sh | ( 는 install uv 도 됩니다).
- uv init my-gpt 로 프로젝트를 만들고, my-gpt 한 뒤 uv add torch tokenizers tqdm numpy 로 설치합니다.
- Apple Silicon 맥이면 uv run python -c "import torch; (torch.backends.mps.is_available())" 가 True 인지 봅니다. NVIDIA GPU 는 torch.cuda.is_available() 로 봅니다.
Apple Silicon 은 MPS, 리눅스·의 NVIDIA GPU 는 CUDA, 그 밖에는 CPU 로 학습합니다. CPU 로도 학습할 수 있지만 느립니다. XSLM 에서 배운 이름(····)은 PyTorch 코드에도 그대로 나옵니다.
직접 타이핑하며 실습하기
세 명령을 차례대로 입력하세요. Python 버전, 32bit x86 계열 구조, ready가 나오는지 봅니다. 이후의 명령도 모두 이 터미널에서 실행합니다. 내 컴퓨터의 터미널을 따로 열 필요가 없습니다.
python3 --version
uname -m
python3 -c "import json, math, random, http.server; print('ready')"
터미널에서 실습하기
여기까지 이해했나요?
여기서 torch 설치와 MPS 설정이 필요 없는 이유를 설명해 보세요. 실제 학습 계산은 브라우저가 흉내 내는 리눅스 CPU에서 이루어집니다.
막혔을 때 확인하기
torch가 없다고 pip install torch를 시도하지 마세요. 이번 소스는 torch를 불러오지 않습니다. 터미널을 받지 못하면 연결을 확인하고 다시 시도하세요. 성공 문구만 흉내 낸 것은 Python 이 아닙니다.
자주 묻는 질문
pip install torch 를 하면 더 빨라지나요?
이 터미널에서는 하지 마세요. PyTorch 는 32bit 리눅스용 패키지가 없고, 있어도 512MB 메모리의 에뮬레이터에서는 돌기 어렵습니다. XSLM 소스는 torch 를 불러오지 않으므로 필요하지도 않습니다. PyTorch 는 내 컴퓨터에 따로 설치해 쓰세요.
Pyodide 로 브라우저에서 Python 을 돌리면 안 되나요?
Pyodide 는 브라우저에서 Python 계산을 할 수 있어 토크나이저·학습까지는 됩니다. 하지만 일반적인 소켓 서버와 백그라운드 에는 제약이 있어 Runner( 서버)를 띄우고 다른 프로그램(XChat)이 접속하는 실습을 할 수 없습니다. 그래서 모든 실습을 진짜 리눅스(Alpine)에서 합니다.
새로 고침하면 무엇이 남고 무엇이 사라지나요?
~/xslm 안의 .py·.json·.txt·.md 파일(최대 100개·)은 명령이 끝날 때와 5초마다 이 브라우저에 저장되어 다시 열면 돌아옵니다. 실행 중인 프로그램, 그 밖의 확장자, 다른 폴더의 파일은 사라집니다. 저장은 이 브라우저에만 되므로 다른 브라우저나 컴퓨터에서는 빈 상태로 시작합니다.