T5X는 JAX 및 Flax에서 T5 (및 기타)의 새롭고 개선 된 구현입니다. MESHTF를 사용한 텐서 플로의 T5는 더 이상 활발하게 개발되지 않습니다. T5를 처음 사용하는 경우 T5X로 시작하는 것이 좋습니다.
t5
라이브러리는 주로 통합 텍스트-텍스트 변압기로 전송 학습의 한계를 탐색 하는 실험을 재현하기위한 코드 역할을합니다. 이 논문에서는 큰 텍스트 코퍼스에서 미리 훈련 된 텍스트-텍스트 변압기를 사용하여 여러 NLP 작업에서 최첨단 결과를 달성하는 방법을 보여줍니다.
이 저장소의 대부분의 코드는 데이터 세트로드, 전처리, 믹싱 및 평가에 사용됩니다. 또한 출판물과 함께 발표 된 미리 훈련 된 모델을 미세 조정하는 방법을 제공합니다.
t5
라이브러리는 텍스트-텍스트 작업의 혼합에 대한 교육 및 미세 조정 (잠재적으로 거대한 ) 모델에 유용한 모듈을 제공하여 향후 모델 개발에 사용할 수 있습니다.
도서관
용법
C4
데이터 세트 준비
설치
GCP에서 TPU 설정
훈련
미세 조정
평가
풀다
내보내다
GPU 사용
실험을 재현합니다
유용한 옵션
릴리스 모델 체크 포인트
인용하는 방법
t5.data
는 tf.data.Dataset
s를 제공하는 Task
객체를 정의하기위한 패키지입니다.
각 Task
다음으로 구성됩니다.
데이터 소스
텍스트 전 처리기 기능 (들)
문장 모델
메트릭 함수
또한 선택적으로 제공 할 수 있습니다.
토큰 전 처리기 기능 (들)
후 프로세스 기능 (들)
데이터 소스는 tf.data.Dataset
을 제공하는 임의의 기능 일 수 있지만 TFDS (TensorFlow DataSets) ( TfdsTask
)에서 사용 가능한 데이터 세트에 대해 간단한 래퍼를 제공하거나 한 줄 당 한 예제 ( TextLineTask
)가있는 텍스트 파일로 저장됩니다. .
텍스트 전 처리기는 소스 데이터 세트의 예를 inputs
및 targets
필드가있는 텍스트-텍스트 모델에 적합한 형식으로 변환합니다. 예를 들어, 사전 정의 된 t5.data.preprocessors.translate
Preprocessor는 입력을 양식에서 변환합니다.
{ 'de': 'das ist gut.', 'en': '좋아요.'}
형태로
{ '입력': '독일어를 영어로 번역하십시오 : Das ist gut.', 'targets': 'it good.'}
텍스트 전처리 외에도 하나 이상의 토큰 전 처리기를 사용하여 사후 입력을 수정할 수도 있습니다. 우리는이 토큰 전 처리기를 사용하여 감독되지 않은 사전 훈련 목표를 구현했습니다.
우리는 t5.data.preprocessors
에서 사전 정의 된 전 처리기를 제공하지만 자신의 직접 정의 할 수도 있습니다.
문장 모델은 입력 문자열을 토큰 화하고 출력 토큰을 디코딩하는 데 사용됩니다. Google/SentencePiece 라이브러리로 자신의 모델을 만들거나 t5.data.DEFAULT_SPM_PATH
에서 기본 모델을 사용할 수 있습니다. 직접 생성하는 경우 플래그를 사용해야합니다. --pad_id=0 --eos_id=1 --unk_id=2 --bos_id=-1
spm_train
bos_id = -1과 함께 모델 코드와 호환됩니다.
메트릭 함수는 모델의 대상과 예측을 감안할 때 점수를 반환합니다. 메트릭을 호출하기 전에 대상 및 예측 텍스트를 다른 형식으로 변환하기 위해 후 프로세스 기능을 정의 할 수도 있습니다. 우리는 t5.evaluation.metrics
에서 사전 정의 된 메트릭을 제공합니다.
마지막으로, t5.data
에는 혼합 속도를 지정하기위한 다양한 기능을 사용하여 다중 Task
데이터 세트를 결합 할 수있는 Mixture
클래스가 포함되어 있습니다.
t5.evaluation
에는 두 가지 핵심 구성 요소가 포함됩니다.
평가 중에 사용할 메트릭
평가 시간에 이러한 메트릭을 적용하기위한 유틸리티
t5.models
T5 Tasks
과 Mixtures
교육, 평가 및 추론을위한 모델 구현에 연결하기위한 심이 포함되어 있습니다.
현재 2 개의 심이 사용 가능합니다. 하나는 종이에서 사용했던 메쉬 텐서 플로 변압기와 Hugging Face Transformers 라이브러리에 사용되었습니다. Hugging Face API는 현재 실험적이며 변경 될 수 있지만 단일 GPU에서 Pytorch를 사용하여 미리 훈련 된 모델을 간단하고 쉬운 방법으로로드하고 미세 조정하고 평가할 수있는 방법을 제공합니다. TPU에서 가장 큰 모델을 사용하거나 논문에서 결과를 재현하려면 MTFModel API 및 t5_mesh_transformer
바이너리를 사용해야합니다. Pytorch의 GPU에서 모델에 미세 조정에 관심이 있다면 HFPyTorchModel API를 사용해보십시오. hfpytorchmodel은 실험적이기 때문에,이 readme의 나머지 부분은 mtfmodel 및 관련 바이너리의 사용을 가정합니다. hfpytorchmodel의 사용 예는 여기에서 확인할 수 있습니다.
T5를 시도하는 가장 쉬운 방법은 Colab 튜토리얼에서 무료 TPU를 사용하는 것입니다.
아래는 코드베이스와 함께 명령 줄에서 모델에서 사전 트레인, 미세 조정, 평가 및 디코딩 방법에 대한 예제를 제공합니다. 이 지침을 사용하여 결과를 재현하고, 릴리스 된 검문소 중 하나를 자신의 데이터 및/또는 과다 투파계로 미세 조정하거나, 모델을 처음부터 미리 훈련시킬 수 있습니다.
새 또는 기존 Task
사용하거나 전처리 된 TSV 파일에서 예제를로드 할 수 있습니다.
Task
사용데이터 소스 (위 참조)에 따라 데이터를 적절하게 준비해야합니다.
Task
바닐라 작업을 사용하는 경우 dataset_fn
에서로드 된 파일 (예 : GCS 버킷)에 액세스 할 수 있는지 확인하십시오.
TfdsTask
미리 정의 된 Task
의 대부분은 TFD (Tensorflow DataSets)를 데이터 소스로 사용합니다. TfdsTask
사용하여 교육 바이너리 (아래 지침 참조)를 실행할 때 데이터 세트는 처음 사용하면 자동으로 다운로드 및 준비됩니다. 준비가 완료된 후, 데이터 세트는 로컬 스토리지에 캐시되어 향후 실행 에서이 오버 헤드를 피합니다. 클라우드에서 작업하는 경우 gcs 버킷과 같은 지속적인 스토리지 위치를 가리 키도록 --t5_tfds_data_dir
플래그를 설정하는 것이 좋습니다. 이것은 TPU에 대한 훈련시 요구 사항입니다.
감독되지 않은 사전 훈련을 위해 만든 C4 데이터 세트는 Tensorflow 데이터 세트에서 사용할 수 있지만 RAW Common Crawl Scrapes (~ 7 TB)를 다운로드하고 준비를위한 계산 (~ 335 CPU-Day)을 위해 상당한 양의 대역폭이 필요합니다. 데이터 세트의 분산 전처리를 가능하게하고 Google Cloud Dataflow에서 실행할 수있는 TFD의 Apache Beam 지원을 활용하는 것이 좋습니다. 근로자 500 명으로 작업은 ~ 16 시간 안에 완료되어야합니다.
MY_PROJECT
및 MY_BUCKET
적절하게 정의한 후 다음 명령을 사용하여 GCP의 DataFlow에서 데이터 세트를 빌드 할 수 있습니다.
PIP는 TFDS-Nightly [C4] Echo 'TFDS-Nightly [C4]'> /tmp/beam_requirements.txt를 설치합니다 Python -m Tensorflow_datasets.scripts.download_and_prepare -datasets = c4/en ---data_dir = gs : // $ my_bucket/tensorflow_datasets -ream_pipeline_options = "project = $ my_project, job_name = c4, staging_location = gs : // $ my_bucket/binaries, temp_location = gs : //$my_bucket/temp, runner=dataflowRunner, quilemp/tmp/beam_Rexeam_RexIt QueMP/Beam_Reirment. = shuffle_mode = service, region = $ my_region "
TFDS 빔 지침에서 자세한 내용을 읽으십시오.
TextLineTask
TextLineTask
는 데이터 소스가 한 줄에 한 예제가있는 텍스트 파일 (또는 파일) 일 때 유용합니다. 그런 다음 텍스트 전 처리기를 사용하여 각 라인을 입력 및 대상 사전으로 변환 할 수 있습니다.
TPU (예 : GCS 버킷에 있음)에 파일에 액세스 할 수 있는지 확인하십시오.
새 Task
정의하는 대신 각 라인이 <input>t<target>
로 형식화되는 데이터 세트로 직접 TSV 파일 (또는 파일)을 사용할 수 있습니다.
그러나 몇 가지 경고가 있습니다.
텍스트 프로세서를 정의하는 방법은 없으므로 TSV는 데이터를 전처리 형식으로 포함해야합니다.
또한 TSV 파일을 직접 사용할 때 토큰 전 처리기, 후 프로세스 기능 또는 평가를위한 메트릭 함수를 설정할 방법도 없습니다.
이러한 기능이 필요한 경우 새 Task
, TfdsTask
또는 TextLineTask
정의해야합니다.
위의 경우와 마찬가지로 TSV 파일은 TPU에 액세스 할 수 있어야합니다 (즉, GCS 버킷에 있습니다).
T5 패키지를 설치하려면 간단히 실행하십시오.
PIP 설치 T5 [GCP]
먼저 Google Cloud에서 VM (Virtual Machine)을 시작해야합니다. VM 출시에 대한 세부 정보는 Google Cloud 문서에서 확인할 수 있습니다.
클라우드 TPU에서 교육을 실행하거나 평가하려면 프로젝트, 영역 및 GCS 버킷을 기반으로 다음 변수를 적절하게 설정해야합니다. 자세한 내용은 Cloud TPU QuickStart 안내서를 참조하십시오.
Export Project = your_project_nameexport zone = your_project_zoneexport 버킷 = gs : // yourbucket/내보내기 tpu_name = t5-tpuexport tpu_size = v3-8export data_dir = "$ {bucket}/your_data_dir"Export model_dir =
다음 명령을 사용하여 클라우드 VM에서 TPU 장치를 만듭니다.
ctpu up up ---name = $ tpu_name --project = $ project -zone = $ zone ---tpu-size = $ tpu_size --tpu 전용-noconf
아래 명령에서는 접착제 벤치 마크 MRPC 작업에 대한 모델을 처음부터 교육합니다. MIXTURE_NAME
Gin 매개 변수를 변경하여 패키지에 제공된 작업 또는 혼합물을 사용할 수 있습니다.
T5_mesh_transformer --tpu = "$ {tpu_name}" -gcp_project = "$ {project}" ---tpu_zone = "$ {Zone}" ---model_dir = "$ {model_dir}" --t5_tfds_data_dir = "$ {data_dir}" -gin_file = "dataSet.gin" ---gin_file = "model/bi_v1.gin" -gin_param = "utils.tpu_mesh_shape.model_parallelism = 1" -gin_param = "utils.tpu_mesh_shape.tpu_topology = '$ {tpu_size}' '" -gin_param = "mixture_name = 'Glue_mrpc_v002'"
작업 및 혼합물의 전체 목록은 실행을 통해 얻을 수 있습니다.
Python -c "import t5; print (t5.data.mixtureregistry.names ())"
또한 새 파일에서 추가 작업과 혼합물을 정의하고 --module_import
플래그를 사용하여 가져올 수도 있습니다.
또는 각 라인이 <input>t<target>
(위 참조)로 형식화되는 TSV 파일로 훈련 할 수 있습니다.
미리 훈련 된 모델 중 하나를 미세 조정하려면 사전 훈련 된 모델의 작동 구성을 교육 스크립트로 전달해야합니다. 작동 구성은 gin_file
플래그로 전달되어야합니다. 모델 아키텍처 및 기타 하이퍼 파라미터를 지정합니다. 또한 미세 조정하려면 혼합물을 지정해야합니다. 예를 들어, glue_mrpc_v002
혼합물의 T5-SMALL 모델을 미세 조정하려면 다음을 실행하십시오.
T5_mesh_transformer --tpu = "$ {tpu_name}" -gcp_project = "$ {project}" ---tpu_zone = "$ {Zone}" ---model_dir = "$ {model_dir}" --t5_tfds_data_dir = "$ {data_dir}" -gin_file = "dataSet.gin" -gin_param = "utils.tpu_mesh_shape.model_parallelism = 1" -gin_param = "utils.tpu_mesh_shape.tpu_topology = '$ {tpu_size}' '" -gin_param = "mixture_name = 'Glue_mrpc_v002'" ---gin_file = "gs : //t5-data/pretraind_models/small/operative_config.gin"
올바른 미리 훈련 된 체크 포인트 경로는 작동 구성에 포함됩니다.
또한 새 파일에서 추가 작업과 혼합물을 정의하고 --module_import
플래그를 사용하여 가져올 수도 있습니다.
또는 각 라인이 <input>t<target>
(위 참조)로 서식하는 TSV 파일로 미세 조정할 수 있습니다. 예를 들어, WMT '19 News Commentary 14 Training Set (예 : English-French)에서 쌍을 이루는 번역 데이터 세트 중 하나를 시도 할 수 있습니다. TSV 파일을 사용하는 경우 MIXTURE_NAME
플래그를 다음과 같이 바꿉니다.
-gin_param = "utils.run.run.train_dataset_fn = @t5.models.mesh_transformer.tsv_dataset_fn"-gin_param = "tsv_dataset_fn.filename = 'gs :/path/to/tsv'"
논문에서 사용한 것과 동일한 하이퍼 파라미터를 미세 조정하려면 (0.001의 일정한 학습 속도를 사용하여) T5 패키지에 포함 된이 진 파일을 전달할 수 있습니다.
--gin_file="learning_rate_schedules/constant_0_001.gin"
사전 훈련 된 모델에 대한 작동 구성은 열차 단계의 수에 효과적으로 제한이 없도록 설정됩니다. 특정 단계를 위해 훈련하려면 전달해야합니다. 사전 훈련 된 모델이 이미 1,000,000 단계로 훈련되었으므로 사전 훈련 후 총 단계 수를 지정해야합니다. 미세 조정. 예를 들어, 추가로 10,000 단계를 미세 조정하려면 통과해야합니다.
--gin_param="run.train_steps = 1010000"
미세 조정에 다른 배치 크기를 사용할 수도 있습니다. 배치의 총 토큰 수에 따라 배치 크기를 설정했습니다. 기본적으로 배치는 512의 시퀀스 길이를 사용합니다. 배치로 토큰 수를 설정하면 설정해야합니다.
--gin_param = "tokens_per_batch=1048576"
T5 프레임 워크에서 모델을 평가하려면 eval.gin
파일을 사용하고 모델 디렉토리, 디코딩 방법 및 평가할 체크 포인트 단계를 지정해야합니다. 따라서 모든 체크 포인트에서 빔 검색을 사용하여 접착제 MRPC 작업을 평가하려면 다음 명령을 사용하십시오.
T5_mesh_transformer --tpu = "$ {tpu_name}" -gcp_project = "$ {project}" ---tpu_zone = "$ {Zone}" ---model_dir = "$ {model_dir}" ---gin_file = "$ {model_dir}/operative_config.gin" " --t5_tfds_data_dir = $ {data_dir} ---gin_file = "Eval.gin" ---gin_file = "beam_search.gin" -gin_param = "run.dataset_split = 'validation'" -gin_param = "utils.tpu_mesh_shape.tpu_topology = '$ {tpu_size}' '" -gin_param = "mixture_name = 'Glue_mrpc_v002'" -gin_param = "eval_checkpoint_step = 'all'"
특정 체크 포인트를 평가하려면 eval_checkpoint_step
매개 변수를 적절한 체크 포인트로 설정하십시오.
--gin_param="eval_checkpoint_step = 100000"
위 명령에서 beam_search.gin
대신 greedy_decode.gin
또는 sample_decode.gin
사용할 수도 있습니다.
T5 프레임 워크의 모델에서 예측을 생성하려면 모델 디렉토리, 디코딩 방법 및 디코딩에 사용할 체크 포인트 단계를 지정해야합니다. /path/to/inputs.txt
에 저장된 입력 시퀀스의 텍스트 파일이 있다고 가정하면 예제 명령은 다음과 같습니다.
T5_mesh_transformer --tpu = "$ {tpu_name}" -gcp_project = "$ {project}" ---tpu_zone = "$ {Zone}" ---model_dir = "$ {model_dir}" ---gin_file = "$ {model_dir}/operative_config.gin" " ---gin_file = "ult.gin" ---gin_file = "sample_decode.gin" ---gin_param = "input_filename = '/path/to/inputs.txt'" ---gin_param = "output_filename = '/tmp/outputs.txt'" -gin_param = "utils.tpu_mesh_shape.tpu_topology = '$ {tpu_size}' '" -gin_param = "ult_checkpoint_step = 'all'"
특정 체크 포인트를 예측하려면 infer_checkpoint_step
매개 변수를 적절한 체크 포인트로 설정하십시오.
--gin_param="infer_checkpoint_step = 100000"
위의 명령에서 sample_decode.gin
대신 beam_search.gin
또는 greedy_decode.gin
사용할 수도 있습니다.
훈련 된 모델 (예 : ML 엔진 또는 Docker 이미지로 배포 할 때)을 제공하는 데 유용한 SavedModel
을 내보낼 수도 있습니다.
T5_mesh_transformer -gcp_project = "$ {project}" ---tpu_zone = "$ {Zone}" ---model_dir = "$ {model_dir}" -use_model_api -모드 = "Export_Predict" --export_dir = "/path/to/export/dir"
위의 명령은 모델 디렉토리에서 최신 체크 포인트를 내보내고 있습니다. 특정 체크 포인트를 내보내려면 다음 플래그를 추가하십시오.
-checkpoint_mode = "특정" -checkpoint_steps = 10000000
T5-Deploy 노트북은 SavedModel
을 내보내고 서빙을 위해 Docker 이미지로 포장하는 것을 보여줍니다.
TPU 대신 gpu를 사용하려면 TPU- 특이 플래그 ( --tpu
, --tpu_zone
, --gcp_project
)를 제거하고 원하는 설정을 기반으로 mesh_shape
및 mesh_devices
에 대한 진 매개 변수를 설정하여 위의 명령을 수정할 수 있습니다. .
예를 들어, 기계가 6 개의 GPU에 액세스하고 3 방향 모델 병렬 처리 및 2 방향 데이터 병렬 처리를 수행하려는 경우 위의 미세 조정 명령이 다음과 같습니다.
T5_mesh_transformer ---model_dir = "$ {model_dir}" --t5_tfds_data_dir = "$ {data_dir}" -gin_file = "dataSet.gin" -gin_param = "utils.run.mesh_shape = '모델 : 3, 배치 : 2'" -gin_param = "utils.run.mesh_devices = [ 'gpu : 0', 'gpu : 1', 'gpu : 2', 'gpu : 3', 'gpu : 4', 'gpu : 5']" -gin_param = "mixture_name = 'Glue_mrpc_v002'" ---gin_file = "gs : //t5-data/pretraind_models/small/operative_config.gin"
단일 GPU를 사용하면 명령이 다음과 같습니다.
T5_mesh_transformer ---model_dir = "$ {model_dir}" --t5_tfds_data_dir = "$ {data_dir}" -gin_file = "dataSet.gin" -gin_param = "utils.run.mesh_shape = '모델 : 1, 배치 : 1'" -gin_param = "utils.run.mesh_devices = [ 'gpu : 0']" -gin_param = "mixture_name = 'Glue_mrpc_v002'" ---gin_file = "gs : //t5-data/pretraind_models/small/operative_config.gin"
우리는 GS : // t5-data/실험의 논문의 모든 실험에 대한 작업 구성을 제공합니다. experiments
폴더에는 논문의 다른 섹션에 해당하는 다른 하위 디렉토리가 있습니다. 예를 들어, gs : // t5-data/실험/목표에는 3.3 절의 실험이 포함되어 있습니다 ( "감독되지 않은 목표"). objectives
폴더의 각 하위 디렉토리에는 특정 실험에 대한 작동 구성이 포함되어 있습니다 ( "실험"이 느슨하게 말하면 논문의 테이블 중 하나의 행 중 하나입니다).
"접두사 언어 모델링"목표 (표 4의 첫 번째 행)의 결과를 재현하려고한다고 가정 해 보겠습니다. 해당 실험에 대한 작동 구성은 GS : // T5-Data/실험/목표/obj-prefix_lm에 살고 있습니다. 기본 디렉토리에는 모델을 사전 훈련하기위한 작동 구성이 있습니다 (gs : //t5-data/experiments/objectives/obj-prefix_lm/operative_config.gin). 그런 다음, 우리가 고려하는 각 다운 스트림 미세 조정 혼합물에 대한 하위 디렉터가 있으며, 각각 고유 한 조작 구성 (예 : gs : //t5-data/experiments/obj-prefix_lm/cnnn_dailymail_v002/operative_config.gin ). 이 실험을 실행하려면 먼저 사전 훈련 작업 구성으로 모델을 사전 훈련하십시오.
export pretrain_model_dir = "$ {buct}/obj-prefix_lm"t5_mesh_transformer --tpu = "$ {tpu_name}" -gcp_project = "$ {project}" ---tpu_zone = "$ {Zone}" ---model_dir = "$ {pretrain_model_dir}" ---gin_file = "gs : //t5-data/experiments/objectives/obj-prefix_lm/operative_config.gin" -gin_param = "utils.tpu_mesh_shape.model_parallelism = 1" -gin_param = "utils.tpu_mesh_shape.tpu_topology = '$ {tpu_size}' '"
그런 다음 CNN/Daily Mail에서 미리 훈련 된 모델을 미세 조정할 수 있습니다.
export finetune_model_dir = "$ {bucet}/obj-prefix_lm/cnn_dailymail_v002"t5_mesh_transformer --tpu = "$ {tpu_name}" -gcp_project = "$ {project}" ---tpu_zone = "$ {Zone}" ---model_dir = "$ {finetune_model_dir}" ---gin_file = "gs : //t5-data/experiments/objectives/obj-prefix_lm/cnn_dailymail_v002/operative_config.gin" -gin_param = "init_checkpoint = '$ {pretrain_model_dir} /model.ckpt-524288'" -gin_param = "utils.tpu_mesh_shape.model_parallelism = 1" -gin_param = "utils.tpu_mesh_shape.tpu_topology = '$ {tpu_size}' '"
일부 교육 변형은 동시에 여러 플래그를 설정해야합니다. 아래 변형 각각에 대해 플래그 그룹을 ./third_party/py/t5/google/scripts/run_finetune.sh
에 추가하십시오.
결정 론적 훈련
--train_gin_param = "mesh_train_dataset_fn.seed = $ {seed}" --train_gin_param = "utils.run.skip_seen_data = true"
언어 모델
--objective = "lm" --train_gin_param = "utils.run.model_type ="lm ""
우리는 논문에 설명 된 미리 훈련 된 모델에 대한 다음 검문소를 발표했습니다.
T5-Small (6 천만 파라미터) : gs : // t5-data/pretrained_models/small
T5-베이스 (2 억 2 천만 파라미터) : gs : // t5-data/pretrained_models/base
T5-LARGE (7 억 7 천만 파라미터) : gs : // t5-data/pretrained_models/large
T5-3B (30 억 파라미터) : gs : // t5-data/pretrained_models/3b
T5-11B (110 억 파라미터) : gs : // t5-data/pretrained_models/11b
추가 실험용 미리 훈련 된 모델 체크 포인트 목록은 여기를 참조하십시오.
이 작업을 확장하거나 사용하는 경우 소개 된 논문을 인용하십시오.
@article {2020T5, 저자 = {Colin Raffel과 Noam Shazeer와 Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena와 Yanqi Zhou와 Wei Li 및 Peter J. Liu}, {통합 된 자금으로 전송 학습의 한계를 탐색합니다. Text-to-Text Transformer}, Journal = {Journal of Machine Learning Research}, Year = {2020}, Volume = {21}, 번호 = {140}, pages = {1-67}, url = {http :/ /jmlr.org/papers/v21/20-074.html}}