이 저장소의 목표는 생산 응용 프로그램에 사용할 수있는 GPT 모델의 간단한 구현을 제공하는 것입니다. 코드는 현재 다음과 같은 사용 사례를 지원합니다.
이 저장소를 자유롭게 포크하고 자신의 GPT 응용 프로그램을 개발하기위한 템플릿으로 사용하십시오.
우리는 chatgpt의 RL 기반 미세 조정을 포함하고 싶습니다. 일반적으로 이것은 기본 지식 모델을 변경하지는 않지만 모델과의 상호 작용을보다 인간과 비슷하게 만듭니다.
코드 설정은 상당히 최소화되어 있으며 로컬 또는 클라우드 VM 환경에서 쉽게 재현 할 수 있습니다.*
conda create -n python38 python=3.8
conda activate python38
conda install --file requirements.txt
* 앞으로이 설정의 Docker 버전을 제공하려고합니다.
우리는 훈련 및 미세 조정을 위해 Tiny Shakespeare 데이터 세트를 다운로드하고 전처리하는 샘플 코드를 제공합니다. 이 코드를 템플릿으로 사용하여 자체 데이터에 대한 데이터 전처리를 만듭니다.
python src/data_io/fetch_shakespeare.py
이전 단계에서 생성 된 작은 셰익스피어 데이터 세트에서 매우 작은 GPT 모델을 처음부터 교육합니다. 결과 모델은 매우 작고 매우 작은 데이터 세트에서 훈련되어 있기 때문에 그다지 일반화 할 수는 없지만 셰익스피어와 같은 인용문을 생성 할 수 있습니다.
구성 파일을 변경하고 자신의 데이터에 대한 모델을 처음부터 훈련시키기 위해. 이 시점에서 데이터 크기 및 리소스에 따라 기술적으로 매우 큰 모델 크기로 확장 할 수 있습니다.*
python src/training/train_main.py --config_file config/train_shakespeare_small.yml
*이 단계에서는 아마도 하나 또는 다중 GPU가 필요할 것입니다.
자신의 데이터에서 오픈 소스 GPT2 모델을 미세 조정합니다. 오픈 소스 GPT- 유사 모델 (GPT2- 메디움, GPT2-XL 등)을 사용할 수 있습니다. 데이터와 리소스가 적고 (CPU에서도 실행할 수 있음) 더 많은 데이터와 리소스가 필요하기 때문에 더 일반적인 옵션입니다. 처음부터 훈련보다 훨씬 빠릅니다.
python src/training/train_main.py --config_file config/finetune_shakespeare.yml
입력 프롬프트가 주어진 훈련 된 모델에서 여러 출력을 샘플링하십시오. 이것은 배치 추론에 사용할 수 있습니다.
python src/inference/sample_main.py --config_file config/sample_shakespeare.yml
REST API에서 숙련 된 모델을 제공하는 LightWeigth 서버.
uvicorn src.inference.service_main:app --reload --reload-include config/sample_gpt2.yml
서버가 실행되면 프롬프트 (게시물 요청)로 엔드 포인트를 쿼리 할 수 있습니다. 쿼리 세부 사항에 대한 자세한 내용은 다음 테스트 스크립트를 살펴보십시오.
서버가 실행되면 다음 스크립트를 사용하여 엔드 포인트를 테스트 할 수 있습니다.
python src/inference/test_query.py
이 repo는 생산 응용 프로그램을 염두에두고 배포되었으며 장치 및 통합 테스트가 포함됩니다.
* Tesing은 광범위한 ATM은 아니지만 향후 커버리지를 늘리려고 노력할 것입니다.
주요 기능을 다루기 위해 단위 테스트가 포함되었습니다. 다음 명령으로 전체 장치 테스트 제품군을 실행할 수 있습니다.
pytest test/unit/
단위 테스트 외에도 교육, 미세 조정 및 샘플링 워크 플로에 대한 통합 테스트가 포함되었습니다.
pytest test/integration/
* 통합 테스트에는 현재 데이터가 작동해야합니다 (위 참조).
일반적으로 리포와 함께 작업 할 때 사전 커밋 후크를 활성화하는 것이 좋습니다. 현재 일부 기본 서식 검사를 실행하고 장치 테스트 제품군 (통합 테스트는 아님)을 실행합니다.
conda install -c conda-forge pre-commit
pre-commit install
이 저장소의 GPT 구현은 Andrej Karpathy의 Nanogpt Repo에서 영감을 받았습니다. 우리의 목표는 모듈로 재 구현, 재 구조를 확장하고 확장하여 다양한 유형의 생산 응용 프로그램을 쉽게 구축 할 수있는 모듈로 확장하는 것이 었습니다.