LLM들과 2024년 초반의 프로그래밍 동향
(antirez.com)- 2023년 인공지능의 진화로 인해 프로그래머들이 LLM(대형 언어 모델)을 일상적으로 활용하는 시대가 열림
- LLM은 기본적인 정보 제공자이자, 복잡하고 지루한 부분을 대신 처리해주는 지식형 멍청이 역할을 함
- 실제 사용에서 LLM의 추론 한계와 강점이 분명히 드러남—특히 고수준 Python 코드에선 빠르지만, 시스템 프로그래밍(C 등)에서는 한계가 뚜렷함
- "일회용 코드" 와 반복적이고 진부한 작업엔 LLM이 매우 유용하게 작동하며, 덕분에 개발자의 에너지와 시간을 절약할 수 있음
- 앞으로는 질문을 잘하는 능력이 LLM 활용의 핵심 역량으로 부상함
- 2023년은 인공지능에 특별한 해임
- 나역시 ChatGPT와 로컬에서 운영되는 LLMs의 등장 이후, 프로그래밍에 있어 새로운 기술을 광범위하게 사용하기 시작
- 코드 작성의 속도를 높이고, 지루하거나 비효율적인 프로그래밍 과정에서 정신적 에너지를 아끼는 것이 주목적
- 구글 검색의 품질 하락으로 LLM은 더욱 중요한 프로그래밍 도구가 됨
- LLMs는 의지와 능력이 있는 사람들에게 도움이 될 수 있지만, 이미 뒤처진 사람들에게는 큰 이점이 없을 수 있음
- 2024년 초, 이제 LLM은 소프트웨어 개발 과정을 간소화하고 효율성을 높이는 데 기여하고 있음.
"Omniscient or Parrots?" - 전지전능 또는 앵무새?
- LLM의 원리적 한계: 많은 전문가들이 처음엔 LLM을 단순한 마르코프 체인이나 데이터의 변주에 불과하다고 과소평가함
- 그러나 실제로 LLM은 이전에 본 데이터를 섞고 결합하는 능력을 보여줌
- 그럼에도 섬세한 추론이나 완전히 새로운 문제에서는 여전히 쉽게 한계를 드러냄
"Stupid but All-Knowing" - 멍청하지만 박식함
- LLM은 기본적인 추론 능력은 약하지만, 프로그래밍·기술 지식의 폭이 매우 넓음
- 복잡해진 현대 개발 환경(수많은 언어, 프레임워크, 라이브러리)에서, 지식형 멍청이인 LLM은 효율적 파트너가 됨
- Keras→PyTorch 등 기술 이전도 문서 탐색 없이 LLM 도움으로 손쉽게 진행 가능함
실제 사용 사례
- 텐서 재구성을 위한 코드 작성 사례: PyTorch에서 구현된 신경망 모델과 배치에 대한 설명을 바탕으로, GPT-4가 텐서의 차원과 데이터 레이아웃을 변경하는 데 필요한 코드를 작성.
- BLE 클라이언트 구현 사례: Objective C를 사용하여 macOS 네이티브 API로 BLE 클라이언트를 구현. ChatGPT를 활용해 BLE API와 Objective C 프로그래밍을 다시 학습하고, 코드 작성 과정을 가속화.
- 컨볼루션 신경망 해석 사례: 문서화가 부족한 컨볼루션 신경망을 Python 스크립트로 구현. ChatGPT가 네트워크의 입력과 출력을 해석하고, 실제 이미지 테스트를 통해 네트워크의 기능을 파악하는 데 도움을 제공.
- 반복적이고 재미없는 작업은 LLM에게 맡기고, 결과를 검증하는 식으로 개발 효율을 극대화함
- LLM의 추론 능력은 기존에 본 예시를 조합하는 "인터폴레이션" 수준이지만, 이는 실무에서 충분히 쓸모 있음
"Disposable Programs" - 일회용 프로그램의 시대
- 단발성·반복적 업무에는 LLM 코드 자동생성이 매우 효과적임
- 학습 과정의 손실 곡선 시각화: PyTorch 프로그램이 생성한 CSV 파일 형식을 GPT-4에 보여주고, 다양한 실험들의 검증 손실 곡선을 비교하는 프로그램을 요청. GPT-4가 생성한 결과물로, 30초 만에 완성.
-
AirBnB CSV 보고서 분석 프로그램: 월별 및 연도별 아파트 그룹화, 청소 비용 및 예약당 밤 수를 고려한 평균 임대 가격 통계를 생성. GPT-4를 사용하여 첫 시도에 작동하는 프로그램 작성.
- 실제로 Airbnb 매출 통계 코드를 예시로, 간단한 설명만으로 곧바로 동작하는 파이썬 코드가 생성됨
- 이런 작업을 직접 한다면 시간 대비 효율이 떨어지고, LLM 활용이 현명함
LLM의 한계
- 시스템 프로그래밍의 복잡성: 시스템 프로그래밍, 특히 C 언어 프로그래밍에서 LLM의 한계가 뚜렸함
- LLM의 활용: 복잡한 추론이 필요한 경우 LLM은 종종 실패함. 이로 인해 시스템 프로그래밍에서는 주로 문서화 도구로 사용됨.
- 실험의 예시: 블룸 필터(Bloom filter)의 C 언어 구현 요구 사항 정의 및 작성. 해싱 함수의 중요한 측면에 중점을 둠. 구현은 100,000개의 요소를 저장할 수 있으며, 최대 5%의 거짓 긍정 확률을 가짐. 추가되는 요소는 널 종료 문자열임.
- llama.cpp의 Q6_K 양자화 포맷을 LLM으로 설명받으려 했으나, 설명이나 코드 모두 실질적으로 쓸모 없는 결과가 나옴
- 이와 같은 특수한 역공학·구조 해석은 여전히 사람이 직접 코드를 분석하고 주석을 남기는 수밖에 없음
"Putting Things in Perspective"
- 현대 프로그래밍의 특성: 대부분의 현대 프로그래밍은 높은 수준의 추론을 요구하지 않고, 기존 것을 약간씩 바꿔 반복하는 작업이 많음.
- LLM의 역할과 한계: LLM은 이러한 낮은 수준의 반복 업무에 유용하지만, 맥락 이해와 장기적 추론에는 약함
- 프로그래밍 직업의 미래 가치: LLM이 일부 작업을 수행할 수 있다면, 몇 년 안에 프로그래밍 직업의 가치에 대해 재고할 필요가 있음.
- LLM의 추론 능력: LLM이 일부 추론 능력을 가지고 있다고 볼 수 있음, 비록 그 모델이 약하고 불완전하더라도.
- LLM 활용의 중요성: LLM을 활용하는 능력은 중요하며, 문제를 명확하게 서술하는 능력은 AI 뿐만 아니라 인간과의 소통에서도 중요함.
- LLM은 더 이상 미래의 기술이 아닌, 실질적인 생산성 도구로 자리 잡고 있음
- 본인은 앞으로도 "쓸모 없는 디테일"에 시간을 쓰지 않기 위해 LLM을 적극 활용할 것임
Hacker News 의견
-
LLM의 코드 지원에 대한 활성화 효과
- LLM은 새로운 작업에 대한 활성화 에너지를 충분히 줄여서, 그렇지 않았다면 시도조차 하지 않았을 작업들을 실제로 완수하게 함.
- 인터넷과 오픈소스 운동이 비슷한 효과를 가져와, 관심 있는 프로젝트를 시도하지 않으면 다른 사람이 비슷한 문제를 해결하여 재사용하거나 재목적화할 수 있는 기회를 제공함.
- LLM 자체는 매우 유능하지 않지만, 기본 기술과 동기가 있는 사람들에게는 힘의 배가 효과를 제공함.
-
프로그래밍에서 LLM의 이점
- LLM을 사용하는 가장 좋은 시점은 주제에 대해 충분히 알고 있어서, 적어도 결과를 검증할 수 있고, 원하는 것을 상세하게 (이상적으로는 중요한 세부사항만) 설명할 수 있을 때임.
- LLM은 작업을 더 빠르게 하거나, 그렇지 않았으면 시도하지 않았을 작업을 하게 하거나, 일회성이지만 가치 있는 프로그램을 만드는 데 도움을 줌.
- 새로운 주제를 탐색하는 데도 매우 유용하며, 기본 용어를 이해하고, 구별되는 점을 듣고 이해하며, 주제에 대한 권위자가 누구인지 아는 것이 많은 분야로의 입문임.
-
LLM의 미평가된 측면
- LLM은 '모든 것을 아는 개발자' 역할을 할 수 있음.
- 아무리 숙련된 프로그래머라도 낯선 기술을 마주칠 때가 있으며, LLM은 이러한 상황에서 올바른 방향을 제시할 수 있음.
-
GPT-4를 이용한 버그 수정 경험
- GPT-4를 사용하여 이해하기 어려운 디컴파일된 코드를 깨끗한 버전으로 변환하여 오랫동안 문제를 일으킨 버그를 수정할 수 있었음.
-
코드 편집 툴 'aider' 소개
- 많은 사람들이 GPT와 로컬 파일 간에 코드를 오가며 작업하는 번거로운 워크플로우를 견디고 있음.
- 'aider'는 로컬 git 저장소를 GPT와 공유하여 새 코드와 편집 사항을 직접 파일에 적용하고, 프로젝트와 통합된 코드를 작성할 수 있게 함.
-
LLM의 한계 인식
- 매우 유능한 소프트웨어 엔지니어가 자신의 전문 분야에서 LLM이 무용하다고 느끼지만, 여전히 그것을 사용할 방법을 찾으려고 함.
- 협력을 통해 서로의 기술을 보완하고, 협력적인 노력이 부분의 합보다 더 클 수 있음.
-
새 프로젝트 시작의 임피던스 문제
- ChatGPT/LLM을 사용하면 프로젝트 시작 부분에 필요한 노력을 외부로 이전할 수 있음.
- LLM은 더 느리고 비효율적일 수 있지만, 시작하는 데 필요한 비용을 줄여줌으로써 프로젝트 중요 부분에 더 많은 지구력을 유지할 수 있음.
-
LLM에 대한 비판적 시각
- LLM이 훈련 세트 밖의 것을 얼마나 잘 처리하는지를 측정하는 수치적 증거가 필요함.
- LLM이 흥미로운 텍스트 작업을 할 수 있지만, 훈련 세트 내의 쿼리 부분을 어떻게 보장할 수 있을지에 대한 의문이 있음.
-
LLM을 사용한 지식 습득
- LLM을 사용하여 빠르게 지식을 얻고, LLM이 제공하는 정보가 터무니없는 것인지 확인할 수 있음.
- 프로그래밍은 정확성을 쉽게 검증할 수 있기 때문에 LLM에 특히 적합함.
-
LLM에 대한 회의적인 시각
- LLM이 매일 점점 더 많은 '잡지식'으로부터 사용자를 구해줌.
- Redis의 창시자가 '잡지식'에 대해 언급하는 것은 아이러니하며, 이는 프로그래밍에 대한 일종의 냉소적인 관점을 보여줌.