이것은 EMNLP 2021 논문에서 실험을 재현하는 코드 "매개 변수 효율적인 프롬프트 튜닝을위한 스케일의 힘"(Lester et al., 2021)입니다.
이 모델은 T5X에 구축되어 모델 및 교육 루프를 정의합니다. 실제 모델 계산을 정의하는 flaxformer; 낮은 레벨 모델 레이어를 정의하는 아마. 그리고 실제 실행을 제공하는 Jax. 구현에 대한 세부 사항은 여기에서 찾을 수 있습니다.
gs://{bucket-name}/path/to/item/in/bucket 같은 형식의 URI를 사용 하여이 버킷에 데이터를 읽고 쓸 것입니다. 여기에서는 캐시 된 데이터 세트와 모델 체크 포인트 및 결과를 저장할 것입니다. 참조의 편의성을 위해 TPU VM과 상호 작용하기위한 가장 일반적인 클라우드 명령 중 일부는 다음과 같습니다. # Create a Cloud TPU VM
$ gcloud alpha compute tpus tpu-vm create ${TPU_NAME}
--zone ${ZONE}
--accelerator-type v3-8
--version v2-alpha
# SSH into a Cloud TPU VM
$ gcloud alpha compute tpus tpu-vm ssh ${TPU_NAME} --zone ${ZONE}
# Delete a Cloud TPU VM
$ gcloud alpha compute tpus tpu-vm delete ${TPU_NAME} --zone ${ZONE}git clone --branch=main https://github.com/google-research/prompt-tuning
cd prompt-tuningpython3 -m pip install .[tpu] -f https://storage.googleapis.com/jax-releases/libtpu_releases.html PIP가 버전 0.0.0 설치하려고 시도 할 때까지 Earliler 버전의 종속성 (예를 들어 Tensorflow)을 설치하려고하는 오류가 발생한 경우 --use-deprecated=legacy-resolver 설치 명령에 추가하려고 시도합니다. 이 오류는 종속성을 제공하는 필수 버전과 관련이 있으며 동작을 종종 백 트래킹이라고합니다. 플래그를 사용하는 경우 호환되지 않는 버전의 라이브러리가 설치 될 수 있으며 설치 명령의 출력에서 불일치에 대한 경고를 찾아야합니다.
참고 : 프롬프트 튜닝 내부를 해킹하려고하고 편집 가능한 설치가 필요한 경우 (따라서 훈련을 실행할 때 복제 된 코드의 변경 사항이 사용됩니다) -e 플래그와 함께 pip 실행하면 설치 중에 오류가 발생하면 pyproject.toml 파일을 삭제해야 할 수도 있습니다.
테스트를 실행하려면 [test] python3 -m pytest python3 -m pip install .[test] ...
프롬프트 훈련은 T5X로 모델을 미세 조정하는 것과 유사합니다. 주요 차이점은 사용할 프롬프트 튜닝 구성 파일 세트가 있다는 것입니다.
프롬프트를 훈련하는 데 필요한 모든 부품이있는 데모 스크립트 ( prompt_tuning/scripts/sst2-demo.sh )를 제공합니다. 이것을 시작점으로 사용하거나 MODEL_DIR 및 TFDS_DATA_DIR 환경 변수를 Google 클라우드 스토리지 버킷으로 향하는 환경 변수를 설정 하여이 스크립트를 직접 실행할 수 있습니다.
./prompt-tuning/prompt_tuning/scripts/sst2-demo.sh반복 속도를 돕기 위해 모든 구성을 단일 진 파일로 번들링하는 대신 더 많은 옵션을 명령 줄을 지정하는 경향이 있습니다. 몇 가지 옵션 :
--gin_search_paths :: 콤마 분리 된 디렉토리 목록에서 진 파일의 경로 접두사로 사용할 디렉토리 목록. prompt_tuning.scripts.find_module ${module} 사용하여 구성을 묶는 라이브러리의 설치 위치를 찾을 수 있습니다.--gin_file ::로드 할 진 파일. 우리는 그들이 설치 한 라이브러리에서 시작하여 상대적인 경로를 사용하는 경향이 있습니다 (예 : prompt_tuning/configs/models/t5_1_1_base_prompt.gin 통해 models/t5_1_1_base_prompt.gin 혼란을 피하십시오. 플래그를 사용하여 여러 시간을 사용하여 병합 될 여러 개의 진 파일을 지정할 수 있습니다. 여러 파일에 설정된 구성 옵션은 목록의 마지막 파일의 값을 사용합니다.--gin.{PARAM}={VALUE} PARAM VALUE 이는 실제 명령 줄 인수가 필요하지 않고 구성 옵션을 쉽게 설정하는 데 사용할 수 있습니다. 예를 들어. --gin.utils.SaveCheckpointConfig.keep=20 마지막 20 개의 체크 포인트를 저장합니다.예를 들어 모델이 커지면 XL 및 XXL은 단일 TPU VM과 함께 제공되는 8 TPU에 맞지 않습니다. 이 경우 TPU 포드 조각이 필요합니다 (TPU 아키텍처 및 사용 가능한 구성에 대한 자세한 내용은 여기에서 찾을 수 있습니다). 단일 TPU VM과 포드 슬라이스에서 프롬프트를 훈련시키는 것의 주요 차이점은 이제 여러 TPU VM을 가지고 있으며 각 VM과 동일한 SPMD JAX를 실행한다는 것입니다.이 페이지에는 다중 호스트 JAX 프로그램에 대한 자세한 정보가 있습니다. 이 안내서는 TPU 포드 슬라이스에서 JAX 프로그램 실행에 대한 빠른 소개를 제공하지만 여기에서 주요 점수를 줄 것입니다.
$ gcloud alpha compute tpus tpu-vm create ${TPU_NAME}
--zone ${ZONE}
--accelerator-type v3-32
--version v2-alpha--command= flag로 실행하도록 명령을 지정하고 모든 VM (작업자)에서 --worker=all 사용하여 실행해야합니다. $ gcloud alpha compute tpus tpu-vm ssh ${TPU_NAME}
--zone ${ZONE}
--worker=all
--command= " git clone --branch=main https://github.com/google-research/prompt-tuning && cd prompt-tuning && "
python3 -m pip install . -f https://storage.googleapis.com/jax-releases/libtpu_releases.html 프롬프트를 훈련시키기 위해 스크립트를 작성하십시오. 데모 스크립트 ( /prompt_tuning/scripts/sst2-xxl-demo.sh )를 포함 시켰습니다. 열차에는 T5 1.1 LM100K XXL을 사용하여 SST2 데이터 세트를 해결하라는 프롬프트가 있습니다. 이를 시작점으로 사용하거나 Google 클라우드 스토리지 버킷의 경로를 채우면 결과를 저장할 위치 ( MODEL_DIR )와 TFDS 데이터 ( TFDS_DATA_DIR )를 캐시 할 위치를 지정하거나 환경 변수로 설정할 수 있습니다.
각 직원의 교육 스크립트를 복사하십시오. 이번이 처음으로 scp 실행하는 경우 오류가 발생할 수 있습니다. 오류 메시지에서 ssh-add /.../.ssh/google_compute_engine 명령을 실행하고 다시 시도하십시오.
$ gcloud alpha compute tpus tpu-vm scp sst2-xxl-demo.sh ${TPU_NAME} :
--zone= ${ZONE}
--worker=all$ gcloud alpha compute tpus tpu-vm ssh ${TPU_NAME}
--zone ${ZONE}
--worker=all
--command= " ./sst2-xxl-demo.sh " 근로자 중 한 명이 훈련 중에 오류가 발생하면 다른 근로자에게 TPU를 사용하는 프로세스가 남게됩니다. 이렇게하면 해당 프로세스가 종료되고 TPU를 해제 할 때까지 작업을 다시 시작하지 못하게됩니다. 다음 명령은 이러한 모든 프로세스를 종료해야합니다. kill Command Man 페이지가 초기 오류가있는 작업자에게서 돌아 오는 것을 볼 수 있습니다.
$ gcloud alpha compute tpus tpu-vm ssh ${TPU_NAME}
--zone ${ZONE}
--worker=all
--command= " sudo lsof -t /dev/accel0 | xargs kill -9 "자신의 데이터 세트와 같은 사용자 정의 부품을 사용하여 프롬프트를 훈련하려면 사용자 정의 구성 요소의 T5X 지침을 따르십시오.
코드를 Pip Installable Python 패키지로 패키지하면 단일 디렉토리에 바인딩되지 않으며 python3 -m prompt_tuning.scripts.find_module {your_module} 사용하여 라이브러리에 묶인 GIN 구성을 찾을 수 있도록 gin_search_paths 설정할 수 있습니다. 참고 : GIN 구성을 설치 가능한 패키지에 번들로 묶으려면 구성 파일이 포함 된 디렉토리에 __init__.py가 파일에 파이썬 패키지에 있어야하므로 __init__.py 있는지 확인하십시오.
사용자 정의 구성 요소의 일부가 GIN 구성 가능하면 GIN 파일에서 명시 적으로 가져와야합니다. 진 파일이 구문 분석 후 수입이 발생하면 오류가 발생합니다. 종속성 중 어느 것도 진 구성 가능성이 포함되어 있지 않으면 --gin.MIXTURE_OR_TASK_MODULE="'path.to.your.module' 전달하여 Gin 파일을 쓰지 않아도됩니다. 이것은 모듈을 자동으로 가져 오며 데이터 세트를 교환하는 것이 좋습니다.
프롬프트와 함께 추론하는 제안 된 방법은 모델을 초기화하는 데 사용되는 원래 체크 포인트와 파일의 프롬프트를로드하는 것입니다. 이 섹션에서 부분 로딩에 대해 설명한 바와 같이 T5X는 일부 모델 매개 변수로드하는 동시에 다른 모델 매개 변수를 처음부터 초기화하는 것을 지원합니다. 원래 체크 포인트에서 Frozen 매개 변수를 다시로드하고 프롬프트 파일을 파일로 다시로드하기 위해 from_array 프롬프트 이니셜 라이저와 함께이를 사용합니다. configs/runs/prompt_eval.gin 은이 구성을 설정합니다. PROMPT_FILE 을 제공하면됩니다. 모델이 prompts/ 구성 파일로 교육을받은 경우 인수에서 평가 스크립트로 제거 할 수 있습니다.
포함 된 sst2-demo-eval.sh 스크립트는이 방법으로 평가를 수행하는 예를 보여줍니다. 필요한 것은 EVAL_DIR 및 TFDS_DATA_DIR 환경 변수를 경로로 설정하여 평가 출력 및 TensorFlow 데이터 세트 캐시를 저장하는 것입니다.
T5X에서 평가 스크립트는 데이터 세트에 레이블이 있고 데이터 세트의 메트릭 함수의 최종 결과를 출력한다고 가정합니다. 추론 스크립트에는 레이블이 필요하지 않으며 대신 모델의 예측을 출력합니다. 추론 스크립트와 함께 사용할 아날로그 prompt_infer.gin 파일이 포함되어 있습니다.
프롬프트 튜닝 트레이닝 실행에서 생성 된 T5X 체크 포인트로 추론 또는 평가를하려면 T5X에서 직접 (eval|infer).gin 구성을 사용할 수 있습니다. 그래도 utils.RestoreChekcpointConfig 를 업데이트해야합니다. 새 체크 포인트, assignment_map=() 및 fallback_to_scratch=False path 설정해야합니다.
모든 모델, 교육, 평가, 저장, 복원 등 구성은 GIN을 통해 수행됩니다. GIN 과이 프라이머에 대한 일반적인 소개는 Gin-Config 저장소를 참조하십시오.
우리는 T5X 구성 레이아웃을 따릅니다.
runs/ :: 모델의 실제 교육을위한 구성이 포함되어 있습니다. 데이터 세트 및 평가 구성과 같은 것들이 진행되는 곳입니다.architectures/ :: 모델 작동 방식에 대한 구성이 포함되어 있습니다. Encoder-Decoder vs Decoder 전용 및 포함 공유와 같은 것들이 구성되는 곳입니다.models/ :: 레이어 수와 같은 모델 특정 매개 변수를 설정하는 구성이 포함되어 있습니다. 또한 사용 된 T5X 모델 래퍼와 같은 것을 구성합니다.models/decoding/ :: 사용하기 쉬운 구성이 포함되어있어 추론 중에 모델이 텍스트를 생성하는 방법을 바꾸고 빔 검색 및 핵 샘플링을위한 구성이 포함되어 있습니다.models/sizes/ :: 다양한 크기의 모델을 생성하기위한 다양한 설정이 포함되어 있으며, 기본 버전과 결합하여 크기 버전을 만들어 t5_1_1_prompt.gin + sizes/large.gin 과 같은 크기 버전을 만듭니다. T5 1.1 큰 모델을 만듭니다. 오른쪽이있는 GIN 파일로 이미 사용할 수있는 일부 일반적인 조합에는 위의 예제에 대한 t5_1_1_large_prompt.gin 포함됩니다. 참고 : 이 크기 파일은 기본 모델 파일 에이어야 합니다.prompts/ :: 우리의 추가 디렉토리에는 PROMPT 진 변수를 설정하는 구성이 포함되어있어 프롬프트 초기화 기반 --gin_file models/ 전환 할 수 있습니다. 명령 줄에 --gin_file 인수를 지정할 때 순서가 중요합니다. 진 파일을 지정 해야하는 일반적인 순서는 다음과 같습니다.
models/*.ginprompts/*.ginmodels/sizes/*.gin*models/decoding/*.ginruns/*.gin T5X에는 MIXTURE_OR_TASK_NAME 또는 TASK_FEATURE_LENGTHS 와 같은 필요한 필드가 있습니다. 우리는 두 가지를 더 추가합니다.
PROMPT_LENGTH :: 우리가 사용하는 프롬프트 길이는 여러 곳에서 참조 할 수 있고 값이 동기화되어 있는지 확인할 수있는 성 매크로로 필요한 몇 가지 다른 장소에서 사용됩니다.PROMPT :: 이것은 flaxformer PromptX 서브 클래스에서 사용될 실제 프롬프트 모듈의 구성입니다. 참고 : 프롬프트 튜닝은 현재 예제 포장을 지원하지 않습니다. 즉, 최대 목표 길이는 각 예제의 대상에 맞게 충분히 길어야합니다. 이는 TASK_FEATURE_LENGTHS 매핑의 targets 키가 훨씬 짧을 수 있음을 의미합니다. 예를 들어 많은 SuperGlue (Wang et al., 2019) 작업의 경우 약 4 개가 P5X 기본값 인 62에 비해 4 개입니다.
프롬프트 매개 변수의 초기화를위한 몇 가지 옵션이 있습니다. 우리는 3.2 절의 다양한 방법과 파일의 초기화를 지원합니다. 후자는 MNLI에서 배운 프롬프트에서 시작하여 Boolq에서 Train과 같은 일을 할 수있게합니다.
모든 이니셜 라이더는 초기화 함수에 대한 폐쇄를 반환하는 매개 변수화 된 함수 인 Flax Inerializer API를 따릅니다. 실제 초기화 기능에는 항상 서명이 있습니다
def initializer ( rng : Array , shape : Sequence [ int ]) -> Array :
... configs/prompts 디렉토리에서 각 초기화 체계를 GIN 구성 파일로 제공합니다. --gin_file=path/to/configs/prompts/scheme.gin 과 함께 진 파일을 포함시켜 사용할 수 있습니다. 이 파일은 기본 모델 파일 에이어야 하며, 그렇지 않으면 기본 (랜덤 균일) 메소드가 선택한 방법을 덮어 씁니다. 이러한 초기화 방법 중 일부는 GIN 파일 중 하나의 재정의 플래그이지만 추가 진 값을 설정해야합니다.
임의의 유니폼
사람들이 초기화를 포함시키는 데 사용한 것과 유사한 표준의 무작위 초기화. 이것은 기본값이며 진 파일이 필요하지 않습니다. 랜덤 값의 척도는 prompt_init/linen.initializers.uniform.scale=N 재정의하여 조정할 수 있습니다.
샘플링 된 어휘
from_sample_of_embeddings 이니셜 라이저를 사용하여 각 프롬프트 위치에 대한 초기화로 사용할 토큰 임베딩을 샘플링하십시오. prompt_init/prompts.from_samples_of_embeddings.population_size 매개 변수로 샘플링을 첫 번째 n 임베딩으로 제한 할 수 있습니다.
이것은 --gin_file=prompt_tuning/configs/prompts/from_sampled_vocab.gin 과 함께 사용할 수 있습니다. 이 방법은 초기 모델 체크 포인트에서 추출한 임베딩 테이블을 사용합니다. 또한 자신의 임베딩 파일에 --gin_file=prompt_tuning/configs/prompts/from_sampled_vocab_numpy.gin 제공 할 수도 있습니다. 이 방법을 사용하려면 모델의 임베딩 테이블의 뾰족한 배열 인 EMBEDDING_FILE 대한 값을 제공해야합니다. 이것은 prompt_tuning.scripts.extract_variable을 사용하여 모델 체크 포인트에서 추출 할 수 있습니다.
클래스 레이블
from_embedded_list 이니셜 라이저를 통해 클래스 레이블 (일명 구두화기 )을 포함하여 프롬프트 타임 스텝 초기화를 지원합니다. 사용할 단어 목록 (클래스 레이블)을 제공하는 사용자. 각 단어는 제공된 어휘에 의해 토큰 화됩니다. 제공된 어휘 테이블이 포함되어 있습니다. 필요한 경우 하위 토크를 가로 질러 집계됩니다. 즉각적인 시간 단계를 초기화하는 데 사용되었습니다. 제공된 토큰이 전체 프롬프트 길이를 덮지 않으면 제공된 Fall Back 이니셜 라이저를 사용하여 누락 된 토큰이 초기화됩니다.
우리는이 초기화를 위의 초기화로 구성함으로써 채워지지 않은 프롬프트 토큰이 포함 된 테이블에서 샘플링하여 채워진 용지를 일치시킬 수 있습니다. --gin_file=prompt_tuning/configs/prompts/from_class_labels.gin 과 함께 사용할 수 있습니다. 이를 위해서는 신속한 초기화로 포함하려는 단어 목록 인 CLASS_LABELS 설정해야합니다. 또한 --gin_file=prompt_tuning/configs/prompts/from_class_labels_numpy.gin 과 함께 자신의 임베딩 파일 (위와 동일)을 제공 할 수도 있습니다. 추가로 설정 EMBEDDING_FILE 설정해야합니다.
문자열에서
또한 이산 프롬프트 나 작업 설명에서 시작하는 데 사용되는 일부 문자열의 임베딩으로 프롬프트 초기화를 지원합니다. 이것은 from_embedded_string 이니셜 라이저를 사용합니다. 문자열은 제공된 어휘에 의해 토큰 화되고, 각 토큰은 제공된 임베딩 테이블에서 찾아옵니다. 제공된 토큰이 전체 프롬프트 길이를 덮지 않으면 제공된 Fall Back 이니셜 라이저를 사용하여 누락 된 토큰이 초기화됩니다.
참고 : 어휘는 문자열을 일련의 ID로 변환합니다. 문자열이 Seqio 작업이 수행하는 텍스트 형식 (구두점 주변의 공간 등)의 결과와 일치하는지 확인해야합니다.
파일에서
from_array 이니셜 라이저가있는 파일에서 프롬프트를로드하여 작업 간 전송을 활성화 할 수 있습니다. 이것은 --gin_file=prompt_tuning/configs/prompts/from_file.gin 으로 수행됩니다. 로드 할 프롬프트가있는 Numpy 파일의 경로로 PROMPT_FILE 설정해야합니다. 훈련시 Numpy 버전의 프롬프트는 기본적으로 배출되지만, 위에서 언급 한 스크립트로 프롬프트를 추출 할 수도 있습니다.
우리는 100k 단계의 언어 모델 적응이있는 T5x 기본 체크 포인트를 출시했습니다.
이들은 공개 메쉬 텐서 플로우 체크 포인트에서 변환됩니다.
우리는 다양한 작업에 대한 사전 상인 프롬프트를 발표했으며 시간이 지남에 따라 추가 할 계획입니다.
프롬프트는 pretrained_prompts 디렉토리에서 찾을 수 있습니다. 거기에서 각 하위 디렉토리 그룹은 그들이 훈련 된 모델에 의해 프롬프트됩니다. 라이브러리와 번들 된 이러한 프롬프트를 참조하는 가장 쉬운 방법은 다음과 같습니다.
--PROMPT_FILE= ` python3 -m prompt_tuning.scripts.find_module prompt_tuning ` /pretrained_prompts/{MODEL_SIZE}/{PROMPT}.npy 병렬 계산의 고유 한 무작위성으로 인해 정확히 동일한 숫자를 얻기 위해 교육과 평가간에 일치 해야하는 몇 가지 설정이 있습니다. 각 모델 하위 디렉토리에는 README.md 가 있습니다. 이러한 설정이 무엇인지 지정합니다. 일치하는 가장 중요한 설정은 배치 크기, TPU 토폴로지 및 모델 병렬 처리 파티셔닝입니다. 테이블에는이 프롬프트를 t5x.eval 로 사용하는지 확인해야 할 점수가 포함되어 있습니다.
이것은 신속한 튜닝에 대한 추가 리소스 모음입니다.
이 작업을 점프 오프 지점으로 사용하면 인용하십시오.
@inproceedings { lester-etal-2021-power ,
title = " The Power of Scale for Parameter-Efficient Prompt Tuning " ,
author = " Lester, Brian and
Al-Rfou, Rami and
Constant, Noah " ,
booktitle = " Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing " ,
month = nov,
year = " 2021 " ,
address = " Online and Punta Cana, Dominican Republic " ,
publisher = " Association for Computational Linguistics " ,
url = " https://aclanthology.org/2021.emnlp-main.243 " ,
doi = " 10.18653/v1/2021.emnlp-main.243 " ,
pages = " 3045--3059 " ,
}이것은 공식적으로 지원되는 Google 제품이 아닙니다.