1P by GN⁺ | ★ favorite | 댓글 1개
  • Jeremy Howard는 언어 모델을 이론보다 코드 우선 접근으로 다루며, OpenAI API부터 로컬 오픈소스 모델까지 실제 사용 흐름을 훑음
  • 언어 모델은 단어가 아니라 토큰을 예측하고, 사전학습·명령 튜닝·RLHF를 거치며 질문 답변과 작업 수행에 더 적합해짐
  • GPT-4는 2023년 9월 기준 강력한 선택지지만, 자기 자신·URL·지식 컷오프 이후 정보에는 약하고 custom instructions가 답변 품질에 큰 영향을 줌
  • OpenAI API는 대화 상태를 저장하지 않아 매번 전체 대화 기록을 보내야 하며, 함수 호출로 Python 실행 같은 도구를 붙일 수 있음
  • 로컬 실행은 Hugging Face Transformers, Llama 2, GPTQ 양자화, RAG, Axolotl 파인튜닝, MLC·llama.cpp 등으로 가능하지만 GPU·프롬프트 형식·평가 한계가 함께 따라옴

언어 모델은 토큰을 예측하는 압축 시스템

  • 언어 모델은 문장의 다음 단어를 예측하거나 빠진 단어를 채우는 방식으로 동작함
    • 예시로 OpenAI의 text-davinci-003에 “panda breeding facility”와 “live frogs”가 포함된 문장을 넣고 이어질 문장을 생성함
    • nat.dev에서는 여러 언어 모델을 실험하고, 다음 토큰 후보의 확률을 볼 수 있음
  • 실제 예측 단위는 단어가 아니라 토큰
    • 토큰은 전체 단어, 부분 단어, 문장부호, 숫자 등이 될 수 있음
    • tiktoken을 사용하면 GPT 계열 모델과 같은 토크나이저로 문자열을 토큰 ID 배열로 인코딩하고 다시 디코딩할 수 있음
    • 예시에서 “they are splashing”은 공백을 포함한 부분 단어 단위로 나뉨
  • 사전학습은 인터넷 문서나 Wikipedia 문장에서 다음 단어를 맞히도록 신경망을 학습시키는 과정임
    • “The Birds” Wikipedia 문장에서 Alfred 다음에 Hitchcock을 맞히는 식의 학습이 예시로 사용됨
    • 좋은 다음 단어 예측을 하려면 모델은 사물, 시간, 영화, 감독, 사람 이름 같은 세계 지식을 내부적으로 학습해야 함
  • Howard는 다음 단어 예측을 압축의 한 형태로 봄
    • 많은 정보를 신경망 파라미터 안에 압축해야 다음 단어를 잘 예측할 수 있음
    • 압축과 지능의 관계는 오래전부터 논의된 아이디어임

사전학습에서 명령 튜닝과 RLHF로 이어지는 흐름

  • Howard는 ULMFiT을 언어 모델 활용 방식의 기초 아이디어로 다룸
    • ULMFiT은 Howard가 2017년에 만든 알고리듬이며, Sebastian Ruder와 함께 2018년 초 논문으로 정리함
    • 원래 예시는 Wikipedia로 언어 모델을 사전학습하는 방식이었음
  • 학습 흐름은 세 단계로 나뉨
    • 언어 모델 사전학습: 다음 단어 예측을 통해 일반 지식을 학습함
    • 언어 모델 파인튜닝: 최종 작업과 더 가까운 문서로 다시 다음 단어 예측을 학습함
    • 분류기 파인튜닝: 최종 작업에 맞게 모델을 조정함
  • 현대 언어 모델에서는 두 번째 단계가 주로 명령 튜닝 형태로 쓰임
    • 질문, 지시, 요청과 그에 대한 응답 데이터로 모델을 조정함
    • 예시 데이터셋으로 OpenOrcaFLAN collection이 언급됨
    • OpenOrca는 약 4GB의 질문·맥락·응답 데이터를 포함함
  • 세 번째 단계에는 RLHF가 자주 쓰임
    • 사람이나 더 나은 모델이 여러 답변 중 더 좋은 답변을 고름
    • 예시로 “커리어에 대한 열정을 되찾는 5가지 아이디어” 같은 질문에 대한 두 답변을 비교하는 방식이 나옴
  • “언어 모델”이라는 표현은 문맥에 따라 사전학습만 된 모델, 명령 튜닝된 모델, RLHF까지 거친 모델을 모두 가리킬 수 있음
    • 순수 사전학습 모델은 단독으로는 대체로 유용성이 낮고, 파인튜닝을 통해 활용성이 커짐
    • Howard는 요즘에는 명령 튜닝만으로 충분할 수 있는지에 대한 논의도 있다고 말함

GPT-4를 잘 쓰는 방법과 한계

  • Howard는 2023년 9월 기준으로 GPT-4를 가장 좋은 언어 모델로 강력 추천함
    • ChatGPT에서 월 20달러를 내고 GPT-4를 많이 사용할 수 있음
    • OpenAI API는 별도 토큰 단위 과금 구조를 가짐
  • GPT-4가 추론을 못 한다는 주장에 대해, 논문이나 인터넷 예시 일부를 직접 넣어보면 맞히는 경우가 많았다고 봄
    • Mabel의 생사 시점 문제, Sally와 형제자매 문제, 컵·골무·다이아몬드 위치 문제가 예시로 나옴
    • Howard는 인터넷에서 GPT-4가 못 한다고 나온 예시를 확인하면 되는 경우가 거의 많았다고 말함
  • 모델은 정답을 항상 주도록 훈련된 시스템이 아님
    • 사전학습은 가장 그럴듯한 다음 단어를 맞히는 과정이고, 인터넷에는 허구·농담·틀린 말도 많음
    • RLHF에서는 더 자신감 있는 답변이 선호됐을 수 있고, 평가자가 틀린 답을 충분히 구분하지 못했을 수 있음
  • custom instructions는 답변 품질을 높이는 데 도움이 됨
    • “추론을 잘한다”, “정답이 없을 수 있으면 말하라”, “먼저 배경 맥락을 몇 문장 설명하라” 같은 지시를 모든 쿼리 앞에 붙일 수 있음
    • 모델은 한 단어씩 생성하고, 생성한 내용을 다시 입력에 포함하므로 더 많은 단어를 생성하면 더 많은 계산을 할 수 있음
    • VV로 시작하면 간결하게 답하게 하는 식의 개인 규칙도 예시로 쓰임
  • GPT-4에도 명확한 한계가 있음
    • 모델 자신이 어떻게 학습됐는지, 문맥 길이가 얼마인지 같은 정보는 학습 단계에서 알 기회가 없었음
    • URL 내용은 잘 모르며, 물어보면 만들어낼 수 있음
    • GPT-4의 사전학습 지식은 2021년 9월까지임
    • 익숙한 고전 퍼즐을 살짝 바꾸면 기존 패턴에 끌려 잘못 답할 수 있음
      • 양배추·염소·늑대 강 건너기 퍼즐에서 제약을 바꾼 예시가 사용됨
      • 잘못된 답을 한 뒤 대화로 고치려 하면 계속 틀릴 수 있어, 채팅의 edit 기능으로 이전 프롬프트를 고치는 편이 나음

OpenAI API와 함수 호출로 도구 붙이기

  • OpenAI API는 Python 등에서 프로그램적으로 언어 모델을 호출할 수 있게 해줌
    • pip install openaiChatCompletion.creategpt-3.5-turbo 같은 모델을 호출하는 예시가 사용됨
    • system 메시지는 ChatGPT의 custom instructions와 비슷한 역할을 함
    • 예시에서는 “Aussie slang과 비유를 쓰는 Aussie LLM”이라는 시스템 프롬프트를 넣고 “What is money?”를 질문함
  • API 대화에는 서버에 지속 상태가 저장되지 않음
    • 후속 질문을 할 때는 전체 대화 기록을 다시 보내야 함
    • 사용자가 이전 assistant 답변을 임의로 바꿔 넣어도 모델은 그 대화 기록을 바탕으로 이어서 답함
    • 예시에서는 “money is like kangaroos”라고 assistant가 말했다고 꾸며 넣고, 그 비유를 이어 설명하게 함
  • 비용은 모델과 토큰 수에 따라 달라짐
    • 토큰은 평균적으로 단어보다 조금 많으며, 약 1⅓ 토큰이 단어 1개 정도임
    • 예시에서 GPT-3.5는 0.0015달러, GPT-4는 0.03달러 수준의 가격 차이가 언급됨
    • 약 150토큰 응답은 GPT-3.5에서 0.0003달러 정도로 계산됨
    • OpenAI usage 페이지에서 사용량을 확인할 수 있음
  • 초기 API 계정은 rate limit이 낮을 수 있음
    • 첫 48시간의 무료 사용자 또는 유료 사용자에게 1분당 3요청 같은 낮은 제한이 예시로 제시됨
    • rate limit 오류가 나면 retry-after 값을 읽고 대기한 뒤 재시도하는 Python 코드가 필요함
  • function calling을 이용하면 모델에 사용할 수 있는 도구를 알려줄 수 있음
    • Python 함수 자체를 넘기는 것이 아니라 JSON schema로 함수 이름, 설명, 파라미터를 알려줌
    • 함수 설명인 docstring이 모델이 도구 용도를 판단하는 핵심 정보가 됨
    • sums 함수 예시에서는 모델이 직접 6+3을 답하지 않고 함수 호출 이름과 인자를 반환함
    • python 함수를 도구로 제공하면 12 factorial 계산을 위해 코드를 생성하고, 사용자가 확인한 뒤 실행해 결과를 다시 대화에 넣을 수 있음
    • 이 방식으로 Jupyter 안에서 간단한 코드 인터프리터를 직접 만들 수 있음

로컬 모델, RAG, 파인튜닝 선택지

  • 로컬에서 언어 모델을 쓰려면 대체로 GPU가 필요함
    • Kaggle은 오래된 GPU 2개가 붙은 노트북을 제공할 수 있음
    • Colab은 더 좋은 GPU와 더 많은 RAM을 제공할 수 있고, 월 구독 시 선택지가 늘어남
    • RunPod, Lambda Labs, Vast.ai 같은 GPU 임대 선택지가 언급됨
    • 민감한 작업은 “모르는 사람의 컴퓨터”에서 돌리기 적절하지 않음
  • GPU 선택에서는 계산 성능보다 메모리 속도와 용량이 중요함
    • 중고 GTX 3090은 eBay에서 약 700달러 수준으로 언급됨
    • RTX 4090은 더 최신 GPU지만 언어 모델에는 3090보다 뚜렷하게 낫지 않음
    • 24GB는 많은 작업에 충분하지 않을 수 있어 3090 두 장이 약 1,500달러 선택지로 제시됨
    • 48GB RAM의 A6000은 약 5,000달러 수준임
    • RAM이 많은 Mac, 특히 M2 Ultra는 기존 모델 실행에는 나쁘지 않지만 Nvidia 카드보다 느림
  • Hugging Face 생태계는 로컬 모델 실험의 중심 도구로 쓰임
    • Transformers로 Hugging Face에 올라온 사전학습·파인튜닝 모델을 불러올 수 있음
    • 리더보드는 참고용이지만 실제 사용성과 잘 맞지 않을 수 있고, 벤치마크 데이터가 학습셋에 섞이는 leakage 문제가 있을 수 있음
    • 일반적인 개인 GPU 환경에서는 70B보다 13B 또는 7B 모델이 현실적임
  • Llama 2 계열과 양자화가 주요 예시로 사용됨
    • Meta의 Llama 2 7B는 사전학습만 된 모델로, 명령 튜닝이나 RLHF가 없어 바로 질문 답변에 적합하지 않음
    • 7B 모델을 16비트로 로드하면 가중치만 약 14GB가 필요함
    • 8비트로 캐스팅하면 메모리를 줄일 수 있지만 느릴 수 있음
    • bfloat16은 더 빠르지만 더 많은 RAM이 필요함
    • GPTQ 양자화 모델은 더 적은 정밀도로 최적화되어 메모리 이동이 줄고, 예시에서는 7B보다 13B GPTQ 모델도 빠르게 실행됨
    • TheBloke가 인기 모델을 GPTQ로 최적화해 Hugging Face에 올리는 사람으로 언급됨
  • 명령 튜닝 모델은 반드시 프롬프트 형식을 맞춰야 함
    • Stable Beluga 같은 Llama 2 기반 명령 튜닝 모델은 모델 페이지의 프롬프트 형식을 그대로 써야 함
    • OpenOrca Platypus 13B GPTQ도 별도 프롬프트 형식을 확인해 함수로 구성함
    • 형식을 맞추면 “Who is Jeremy Howard?” 같은 질문에 더 나은 답변을 얻을 수 있지만, 여전히 환각이 남을 수 있음
  • RAG는 최신 정보나 사유 문서를 활용하기 위한 방식임
    • 질문에 도움이 될 문서를 검색하고, 그 문서를 컨텍스트로 붙여 모델이 답하게 함
    • Jeremy Howard Wikipedia 페이지 613단어를 컨텍스트로 넣자 더 정확한 100단어 약력에 가까운 답변을 생성함
    • sentence-transformers는 문서와 질문을 임베딩 벡터로 바꾸고, 유사도를 계산해 관련 문서를 고를 수 있음
    • 문서가 수천·수백만 개면 벡터 데이터베이스를 사용해 미리 임베딩해 둠
    • H2O GPT는 로컬에서 PDF를 업로드하고 RAG를 수행하는 오픈소스 예시임
    • 후속 질문에서는 검색 모델이 이전 문맥을 모르면 엉뚱한 문서를 찾을 수 있어 주의가 필요함
  • 파인튜닝은 모델 자체의 동작을 바꾸는 방법임
    • 예시 데이터셋은 데이터베이스 스키마, 자연어 질문, 정답 SQL을 포함함
    • Hugging Face datasets 라이브러리로 데이터셋을 불러옴
    • Axolotl을 사용해 Llama 2 예제를 복사하고 SQL용 YAML 설정을 만들어 학습함
    • accelerate launch axolotl 명령으로 약 1시간 학습 후 q_lora_out 디렉터리가 생성됨
    • Q는 quantize, LoRA는 더 작은 모델과 더 작은 GPU에서 학습을 돕는 기법임
    • 학습 후 스키마와 질문을 넣으면 SELECT count(hosts), theme ... GROUP BY theme 형태의 올바른 SQL을 생성함
  • Mac과 다른 런타임 선택지도 있음
    • MLC는 iPhone, Android, 웹브라우저 등에서 언어 모델을 실행할 수 있는 프로젝트임
    • Mac에서 양자화된 7B 모델을 실행해 “What is the meaning of life?”에 답하고, 약 9.6 tokens/s가 나온 예시가 제시됨
    • llama.cppgguf 형식을 사용하며 Python 래퍼로도 호출할 수 있음
    • Nvidia GPU와 Python에 익숙하면 PyTorch와 Hugging Face 생태계를 쓰는 편이 좋음
  • 언어 모델 개발 환경은 빠르게 변하고 아직 초기 단계라 설치와 엣지 케이스가 까다롭지만, Python 프로그래머에게는 흥미로운 시기임
    • fast.ai Discord의 generative 채널에서 질문하거나 경험을 공유할 수 있음

댓글과 토론

Hacker News 의견들
  • 방금 올렸는데 벌써 HN에 올라와서 놀랐음
    이 영상은 꽤 기대하고 있음. 90분짜리 발표 안에 생각나는 핵심 정보를 최대한 담으려 했고, 목표는 개발자들이 “LLM에 대해 알아야 할 걸 전부 알려줘”라고 물을 때 한 곳만 가리킬 수 있게 만드는 것이었음
    그래도 빠뜨린 내용이나 불명확한 부분이 분명 있을 수 있음. 이번이 첫 시도이고, 언젠가 전체 강의로 확장할 계획이라 영상을 본 뒤 남는 질문이나 다뤘어야 한다고 생각하는 개념을 알려주면 좋겠음
    곧 자러 가야 해서, 호주가 늦은 시간이라 아침까지는 질문에 많이 답하기 어려울 수 있음. 그래도 일어나면 이 페이지를 꼭 볼 예정이고, 내일 YouTube 설명란에 관련 논문 링크들도 추가하겠음
    윤리나 정책 이슈는 다루지 않았음. 중요하지 않아서가 아니라, 이번 발표에서는 기술적 이슈에만 완전히 집중하기로 했기 때문임

  • 훌륭했음. 영상과 함께 보는 노트북은 여기 있음: https://github.com/fastai/lm-hackers/blob/main/lm-hackers.ip...
    프로젝트 구성도 좋았음. OpenAI API 해킹, OpenAI functions로 만든 Code Interpreter 흉내, Hugging Face 모델로 로컬 LLM 실행, 마지막 10분에 텍스트-SQL 모델을 만드는 미세조정 예제까지 들어 있음

  • 영상 고마움. 지금까지 본 LLM 활용 튜토리얼 중 최고였음
    https://youtu.be/jkrNMKz9pWU?si=Dvz-Hs4InJXNozhi&t=3278에서 로컬 모델과 GPT-4의 적절한 사용 사례를 말하며 “미세조정으로 내가 풀어야 하는 문제 유형에 특히 강한 모델을 만들 수 있고, 이런 경우에는 GPT-4보다 더 나은 성능도 충분히 가능하다”고 함
    이와 관련해 한동안 생각해 온 아이디어가 있음. 여러 개의 “작은” 모델, 예를 들어 70억 매개변수 모델들을 뒤에 둔 챗봇을 상상해 볼 수 있음. 각 모델은 특정 작업에 맞게 미세조정되어 있고, 이런 시스템이 GPT-4를 능가할 수 있을까?
    대략적인 구상은 이렇다. 문맥/프롬프트를 “라우터 모델”로 보내고, 이 모델이 어떤 전문가 모델이 가장 잘 답하거나 완성할 수 있는지 판단함. 그다음 시스템은 문맥/프롬프트를 해당 전문가 모델로 넘기고 그 답을 반환함. 적절한 전문가 모델이 없으면 일반적인 지시 튜닝 범용 LLM을 사용함
    특정 작업에 맞게 미세조정한 작은 모델이 이론적으로 GPT-4보다 나을 수 있다면, 그런 작은 모델들의 군집이 전체적으로 GPT-4를 넘을 수도 있지 않을까 싶음

    • Sambanova가 방금 비슷한 걸 출시했음. 새 칩에서 실행되는 1조 매개변수 MoE 모델 데모인데, 70억 매개변수 llama2 모델 150개를 각기 다른 주제의 전문가가 되도록 재학습한 구조임. 하나는 “법률” 전문가, 다른 하나는 “물리학” 전문가인 식임
      여기 영상이 있음 [1] https://sambanova.ai/launch2023
      조금 아래로 내려가면 HuggingFace의 GPU에서 실행되는 1800억 매개변수 Falcon 모델과 비교함. MoE 결과는 품질도 비슷할 뿐 아니라 엄청나게 빠르고 거의 즉시 나오는 수준임. 전문가 모델을 교체하거나 새 데이터로 재학습할 수 있다는 점도 큰 장점인데, 더 단일한 1800억 모델에서는 당연히 쉽지 않음
    • 말이 됨. 실제로 지금 그런 모델을 만드는 오픈소스 프로젝트가 여럿 있음. 좋은 예시는 여기임: https://github.com/XueFuzhao/OpenMoE/
    • Google에서 전문가 혼합(mixture of experts)을 찾아보면 됨. 검증되지 않은 유출에 따르면 GPT-4도 이미 이 방식을 쓰고 있다고 함
  • 이 모든 흐름을 시작한 논문을 쓴 사람의 영상이라는 점도 인상적임

  • 훌륭한 영상이라 직장에도 공유했음. 실용적인 관점에서는 내가 아는 한 이 주제에 대한 가장 포괄적인 입문 자료일 가능성이 큼
    특히 “GPT가 X를 못 한다는 바이럴 글은 재현되지 않는다” 섹션이 좋았음. 주변 사람들이 이 기술을 볼 때 비판적으로 생각하는 법을 배우는 데 도움이 되길 바람

  • 훌륭한 영상임. 앞으로 쓸 수 있는 새 요령을 몇 가지 배웠음
    그냥 뭔가를 시도해 보는 것만으로도 새로운 용도를 발견하게 됨
    얼마 전 좋은 예가 있었음. 주소가 담긴 스프레드시트를 지도 레이어로 쓰기 위해 GeoJSON으로 바꿔야 했는데, 매우 게으른 기분이라 ChatGPT가 얼마나 잘 처리하는지 보려고 했음
    첫 단계로 위도/경도 한 쌍을 주고 도/분 형식을 십진수로 바꿔 달라고 했더니 문제없이 계산 과정을 보여줬음. 그다음 전체 위도/경도 열을 주고 계산 과정은 보이지 말라고 했더니 출력도 잘 나왔음
    이어서 자리표시자가 있는 샘플 JSON 구조를 만들고, 데이터를 줄 테니 열 이름으로 자리표시자를 채우라고 했음. 데이터를 붙여 넣자 JSON을 완벽하게 생성함
    흥미로웠던 건 별도 지시 없이 위도/경도 변환을 다시 했고, 내가 언급하지 않은 id 속성도 증가시켜 줬다는 점임. 꽤 인상적이었음

  • Jeremy는 내가 존경하는 인물이고, Queensland에서 태어나 살고 있는 입장에서는 세계적 재능이 정말 우리 주변 어디에나 존재한다는 사실을 떠올리게 해 줌
    물론 모든 분야에 그런 사람이 많겠지만, Jeremy는 내가 알고 있고 깊이 존경하는 사람 중 한 명임