NLP 교육 및 추론 통합 도구 (TurboNLPExp)

저자 : TurboNLP, Tencent TEG 백그라운드 엔지니어

소개

NLP 작업 (시퀀스 라벨링, 분류, 문장 관계 판단, 생성)을 훈련 할 때 머신 러닝 프레임 워크 Pytorch 또는 Tensorflow가 일반적으로 사용되며 모델이 정의되고 커스텀 모델의 데이터 전처리를 달성하기 어렵습니다. 재사용 및 공유, 모델 출시에 대해서도 직면 : 출시 어려움, 높은 지연, 고비용 등 TEG-AI 플랫폼 부서-검색 비즈니스 센터는 2019 년 말부터 초기 단계에서 많은 연구 끝에 , AllenNLP 추론 및 교육 통합 도구를 기반으로 자체 개발 한 TurboNLP는 교육 프레임 워크 TurboNLP-exp 및 추론 프레임 워크 TuboNLP-inference를 포함합니다 .TurboNLP-exp 교육 프레임 워크는 구성 가능하고 단순하며 다중 프레임 워크, 다중 프레임 워크의 특성을 가지고 있습니다. 작업 및 재사용 성 NLP 실험을 빠르고 효율적으로 수행 할 수 있습니다.

TurboNLP 추론 추론 프레임 워크의 최하위 계층은 일반적으로 사용되는 NLP 모델을 통합하는 효율적인 모델 추론 라이브러리 BertInference를 지원하며 TurboNLP-exp와 원활하게 호환되며 추론 성능이 높습니다 (BERT 기반 문서 분류 비즈니스 모델 인 FP6에서 측정 됨). 정확도는 batch_size = 64, Seq_len = 64는 0.275ms / query에 도달, INT8 정확도는 0.126ms / query 성능에 도달했습니다. batch_size = 64, seq_len = 64) 및 기타 특성, NLP 교육 및 추론 통합 도구는 교육을 크게 단순화합니다. 추론 프로세스가 감소합니다. 작업 교육 및 모델 출시와 같은 인건비이 기사에서는 주로 NLP 교육 및 추론 통합 도구를 소개합니다.

배경

NLP 작업은 일반적으로 알고리즘 연구원의 사용자 지정 모델 및 기계 학습 프레임 워크 Pytorch또는 Tensorflow교육 에서의 데이터 전처리이며 libtorch 또는 tensorflow에 대한 수동 배포이며이 프로세스에는 다음과 같은 문제가 있습니다.

  • NLP 작업의 기존 모델 구조 및 데이터 전처리가 높은 반복성을 통해 재정의됩니다.

  • 모델 구조 및 데이터 전처리 코드를 수동으로 수정하고, 학습 매개 변수를 지속적으로 조정하고, 시행 착오를 겪어 코드 혼동을 초래합니다.

  • 모델 복잡성 (다중 모델 및 다중 작업)이 높거나 기존 모델을 최적화하고 개선해야하는 경우 모델 구조에 익숙하지 않은 경우 Python에서 정의한 모델 및 데이터 전처리 코드를 재구성해야합니다.

  • 지식 축적, 모델 재사용 및 공유가 어렵습니다.

  • 온라인 접속이 어렵고, C ++에서는 데이터 전처리가 복잡하고 추론 지연이 큽니다.

  • 오프라인 교육의 효율성을 높이고 프로세스를 통한 NLP 작업의 효과 실험은 어렵고 시행 착오 비용이 높습니다.

위의 기존 문제점을 해결하기 위해 이러한 맥락에서 NLP 훈련 끝을 추론 끝까지 개방하고 자체적으로 훈련 프레임 워크 TurboNLP-exp와 추론 프레임 워크를 개발했습니다 TuboNLP-inference. 다음은 프레임 워크의 전체 아키텍처 다이어그램입니다.

소개

  • 훈련 프레임 워크 TurboNLP-exp

    • TurboNLP-exp는 모듈화, 구성 가능성, 다중 플랫폼 지원, 다중 작업 지원, 다중 모델 형식 내보내기, C ++ 데이터 전처리 등의 특성을 가지고있어 연구원의 빠른 실험을 충족 할 수있을뿐만 아니라 모델을 저장할 수 있습니다. 구성을 통한 프레임 워크 연구자들은 구성을 통해 지식을 재사용하고 공유합니다.

    • TuboNLP-exp는 모델 및 데이터 전처리를위한 모듈 식 설계를 가지고 있습니다. 데이터 전처리를 위해 동일한 유형의 NLP 작업 (시퀀스 라벨링, 분류, 문장 관계 판단, 생성 식)에 대한 데이터 전처리는 기본적으로 동일하며 재사용이 가능합니다. 기존 데이터 전처리 재사용; 모델의 경우 TurboNLP-exp는 임의의 구성 모델 구성을 통해 임 베더, seq2seq_encoder, seq2vec_encoder, 디코더,주의 등 다양한 하위 모듈을 통합하여 신속한 실험 목적을 달성합니다.

    • TuboNLP-exp는 기본 기계 학습 플랫폼 (Pytorch 및 Tensorflow)을 통합했으며 다양한 기계 학습 플랫폼에 익숙해도 모델의 재사용, 공유 및 지식 축적에 영향을주지 않습니다.

    • TurboNLP-exp는 C ++ 및 Python 데이터 전처리를 지원합니다. Python 데이터 전처리는 빠른 실험 디버깅의 특성을 가지고 있으며 주로 학습 측면을 제공합니다 .C ++ 데이터 전처리는 고성능 특성을 가지고 있으며 주로 추론 측면을 제공합니다 .C ++ 데이터 전처리는 동일한 특성을 갖습니다. Python API 인터페이스를 사용하여 연구원은 학습 단계에서 원하는대로 C ++ 및 Python 데이터 전처리간에 전환하여 학습 종료와 추론 종료 간의 데이터 일관성을 보장 할 수 있습니다.

  • 추론 프레임 워크 TurboNLP- 추론

    • TurboNLP 추론은 TuboNLP-exp에서 내 보낸 모델을 직접로드하고 구성에 따라 데이터 전처리를 인스턴스화 할 수 있습니다.

    • TurboNLP 추론은 통합 API, 완전한 문서 및 예제를 제공합니다. 모델 추론 코드는 예제를 통해 빠르게 구현됩니다. 비즈니스 코드는 API 인터페이스와 so 패키지를 통해 추론 라이브러리를 호출합니다.

    • TurboNLP - 추론 추론 프레임 워크 통합하고 일반적으로 사용 모델 NLP : lstm, 인코더 - 디코더, CRF, eSIM을, BERT, 기본 논리가 지원하는 다섯 가지 라이브러리 : BertInference(BERT 추론 가속 라이브러리),, libtorch, tensorflow(WXGTurboTransformers BERT 추론 오픈 소스 라이브러리를 가속화), BertInference-cpu( CPU의 BERT 추론 가속 라이브러리).

TurboNLP-exp 교육 프레임 워크

TurboNLP-exp 교육 프레임 워크는 AllenNLP 연구 개발을 기반으로합니다. 알고리즘 연구자 및 추론의 비즈니스 요구 사항을 충족하기 위해 TurboNLP-exp는 지속적으로 최적화되어 있으며 업계 프레임 워크에는없는 기능을 갖추고 있습니다. 다음 표는 비교입니다. 업계의 다른 프레임 워크와 TurboNLP-exp의

어려움 모듈 식 구성 가능 파이 토치 Tensorflow 멀티 태스킹 교육 다중 모델 형식 내보내기 데이터 전처리 추리
PyText 어려운 에프 에프 에프 파이썬 Caffe2 실행 엔진
AllenNLP 단순한 에프 에프 에프 파이썬 간단한 Python 서비스
TurboNLP-exp 단순한 Python 、 C ++ 효율적인 TurboNLP 추론

다음은 TurboNLP-exp에 대한 최적화를 자세히 소개합니다.

모듈 식 및 구성 가능

TurboNLP-exp의 높은 구성 가능성은 합리적인 모듈 설계 때문입니다 .TurboNLP-exp는 모듈 식 패키징을 통해 임의의 모델 조합 및 확장 하위 모듈 등을 지원하고 새로 연락 한 연구원 TurboNLP-exp를위한 인터페이스 구성을 제공합니다. 데이터 전처리 및 모델 구성은 시각적 인터페이스를 통해 생성되므로 시작의 어려움이 크게 줄어 듭니다.

모듈 식 및 구성 가능한 데이터 전처리

데이터 전처리 대략적으로 나눌 수 4 개 개의 모듈 : dataset_reader , token_indexer , 토큰 화어휘 .

  • dataset_reader : 단어 분할을위한 단어 분할기 및 ID 변환을위한 인덱서를 사용하여 학습 데이터 읽기를 담당합니다. 텍스트 분류 데이터 형식, NER 데이터 형식, BERT 데이터 형식 등 여러 데이터 형식 읽기를 통합하고 사용자 지정 확장을 지원합니다.

  • token_indexer : 토큰 인덱싱 (사전에 따라 id 변환)을 담당하며 다양한 인덱서를 통합합니다. 단어 인덱스에 따라, 단어 인덱스에 따라, 단어 속성 인덱스 등에 따라 사용자 지정 확장을 지원합니다.

  • 토크 나이저 : 텍스트의 단어 분할을 담당하며, NLP 작업에서 일반적으로 사용되는 단어 분할기 (qqseg, wordpiece, 공백, 문자 등)를 통합하고 사용자 지정 확장을 지원합니다.

  • 어휘 : 데이터 사전, 훈련 데이터에서 자동 생성을 지원하고 훈련 후 로컬에 저장하거나 로컬 영역의 기존 사전 파일에서 생성합니다. 어휘는 여러 사전 (토큰 사전, 레이블)을 양식에 동시에 저장합니다. 네임 스페이스 사전 등).

모듈 식 모델 및 구성 가능

모델의 모듈 식 디자인은 모델 , 트레이너내보내기의 세 가지 주요 부분으로 나눌 수 있습니다 .

  • model :이 모듈은 인코더, 디코더, 임 베더 등 NLP 작업의 공통 모델을 통합합니다. 각 하위 모델은 다른 모델로 구성됩니다.이 결합 된 모듈 식 설계는 구성에 따라 모델을 쉽게 정의 할 수 있습니다. NLP 작업과 유사하게 모델 구조는 기본적으로 동일하며 연구원은 구성을 수정하여 모델 구조를 빠르게 조정하고 하위 모델을 사용자 정의 및 확장 할 수 있습니다.

  • trainer : TurboNLP-exp는 학습 과정에서 사용되는 최적화 프로그램, 학습률, 평가 지수 등을 캡슐화하고 빠른 실험 목적을 달성하기 위해 구성을 통해 학습 매개 변수를 수정합니다.

  • 수출 : 모듈 통합하고 다양한 모델 내보내기 형식 : caffe, onnx, pt형식, 구성에 의해 정의 된 형식을 산출했다.

다중 플랫폼 지원

TurboNLP-exp는 기본 기계 학습 플랫폼을 추상화하고 기본 pytorch 및 tensorflow를 호출하는 통합 프레임 워크 인터페이스를 구현합니다 (아래 그림 참조). 프레임 워크는 구성에 따라 인터페이스를 구현하기 위해 pytorch 또는 tensorflow를 선택합니다. pytorch 형식은 현재 표준입니다.

멀티 태스킹 교육

멀티 태스킹 학습은 인간인지 과정의 멀티 태스크 특성을 시뮬레이션하여 개체 인식, 간결함 등과 같은 다양한 유형의 작업을 하나의 모델로 통합합니다. 공통 사전 학습 언어 모델에서 각각의 태거 계층을 학습시킵니다. . 교육 중, 각 작업 영역의 지식과 목표를 상호 보완하여 공동으로 작업 모델의 효과를 개선합니다. 온라인 상태에서 동일한 기본 모델을 사용하여 스토리지 및 컴퓨팅 리소스를 절약합니다. 현재 멀티 태스킹에 대한 수요가 증가하고 있습니다. , TurboNLP-exp는 다중 작업, 다중 조합 및 훈련 스케줄링 방법을 지원합니다 (아래 그림 참조).

TurboNLP-exp의 다중 작업 모델에는 다음과 같은 특성이 있습니다.

  • 기존 단일 작업 모델을 통해 다중 작업 모델을 빠르게 결합 할 수 있습니다.

  • 공유, 누적, 샷컷을 포함한 여러 조합 규칙을 지원합니다.

    • 공유 : 여러 모델이 동일한 인코더 출력을 공유합니다.

    • 누적 : 각 작업의 인코더가 누적되어 각 작업의 태거 레이어로 출력됩니다.

    • shotcut : 각 작업의 인코더 출력은 다음 작업의 인코더 입력으로 사용됩니다.

  • 순차 스케줄링, 무작위 스케줄링 및 공동 스케줄링을 포함한 여러 훈련 스케줄링 방법을 지원합니다.

    • 순차 및 무작위 스케줄링은 여러 작업을 기반으로 각 작업에 대한 최적의 솔루션을 얻을 수있는 대체 훈련에 속하며 더 간단한 통합 입력을 구성 할 필요가 없습니다.

    • Co-scheduling은 공동 훈련에 속하며 통합 된 입력을 사용하며 결국 손실이 누적되므로 종합적인 멀티 태스크 최적 솔루션을 찾고 있습니다.

  • 사용자는 실제 작업 장면에 따라 해당 조합 모드와 스케줄링 모드를 자유롭게 구성 할 수 있으므로 멀티 작업이 최적의 효과를 얻을 수 있습니다.

다중 모델 형식 내보내기

TurboNLP-EXP은 형식을 내보낼 수있다 : caffe,, onnx, pt직접 오히려 복잡한 모델 변환을 통해보다 단부 하중을 추론 직접 수출 TurboNLP - 추론 추론 워크 지원되는 형식을 지원한다.

데이터 전처리

TurboNLP-exp의 데이터 전처리는 Python과 C ++를 모두 지원할 수 있습니다. Python 데이터 전처리는 주로 학습 측면을, C ++ 데이터 전처리는 주로 추론 측면을 제공하며 학습 측면도 제공 할 수 있습니다 (아래 그림 참조).

학습 측면에서 데이터 전처리가 아직 수정 및 디버깅 중일 때 Python 데이터 전처리를 사용하면 빠르게 실험 할 수 있습니다. Python 데이터 전처리가 고정되면 C ++ 데이터 전처리로 전환하여 데이터 전처리 결과를 확인하여 학습 간의 데이터 일관성을 보장합니다. 끝과 추론 끝.

추론 측면에서는 학습 측면과 동일한 구성을 사용하여 C ++ 데이터 전처리 출력이 모델 입력으로 사용되며, C ++ 데이터 전처리 TurboNLP-data-BERT 기반 5에서 데이터 전처리의 낮은 대기 시간을 보장하기 위해 다중 스레딩, 전처리 대기열을 사용합니다. category 모델에서 측정 한 결과, batch_size = 64 및 seq_len = 64 일 때 0.05ms / query 의 성능이 달성됩니다 .

TurboNLP 추론 추론 프레임 워크

TurboNLP - 추론 추론와 완벽하게 호환 프레임 워크 TurboNLP-exp, 具备低延迟, 可配置및 기타 특성, TurboNLP - 추론 추론 지원 다섯 라이브러리를 기본 : BertInference,, (BERT 추론이 라이브러리를 가속화) libtorch, tensorflow(WXGTurboTransformers BERT 추론 오픈 소스 라이브러리를 가속화), BertInference-cpu(BERT 추론은 CPU 도서관에 가속 ) 중에는 TensorRTBertInference 기반으로 개발 된 고성능 BERT 추론 라이브러리 와 Intel과 공동으로 개발 한 CPU에서 BERT 추론 가속을위한 라이브러리 가 있습니다.BertInference-cpu

다음은 추론 프레임 워크 TurboNLP-inference 및 트레이닝 프레임 워크 TurboNLP-exp의 통합 아키텍처 다이어그램입니다.

TurboNLP 추론에는 다음과 같은 기능이 있습니다.

  • NLP 통합 태스크 모델을 사용했을 때 lstm, esim, seq2seq_encoder, attention, transformer등, 모델의 입력 설정 모델 구조와 구성 방법.

  • 직접로드 할 수있는 TurboNLP-exp내보내기는 model.weights모델 형식을 내 보냅니다 .

  • C ++ 데이터 전처리를 사용 TurboNLP-data하고 데이터 전처리 출력을 모델 입력에 자동으로 공급합니다.

  • 추론 코드는 비즈니스 코드에 C ++ 형태로 임베드되므로 패키지 및 API, 가능한 한 비즈니스 코드에 대한 침입을 최소화하고 수정이 유연하고 편리합니다.

비즈니스 애플리케이션

NLP 통합 도구 (TurboNLP-exp 교육 프레임 워크 및 TurboNLP- 추론 프레임 워크)는 비즈니스 모델의 실제 온라인 프로세스에 따라 교육에서 온라인 프로세스 (아래 그림 참조)까지 모델을 크게 단순화합니다. 14.5 / 개인 일, NLP 통합 도구를 사용하려면 일인당 4 개만 필요하므로 ** 72.4 % ** 인건비가 절약됩니다.

TurboNLP 추론은 TEG-AI Platform Department-Search Service Center의 5 가지 서비스를 성공적으로 지원했습니다.

  • 기업의 문서 분류 BERT 모델의 경우 FP16의 정확도는 batch_size = 64 및 seq_len = 64 조건에서 0.290ms / query 성능 에 도달 하고 기계 리소스가 97 % 절약되었으며 온라인주기가 거의 50 % 단축되었습니다. , 기계가 크게 감소하고 인건비가 절감되었습니다.

  • 비즈니스의 텍스트와 비디오 간의 관계를 판단하는 BERT 모델을 사용하면 응답 지연이 원본의 2/3로 줄어들고 장비 리소스가 92.8 % 절약됩니다 .

  • 비즈니스 쿼리는 BERT 기반 모델을 다시 작성하여 이전 모델에 비해 온라인주기와 인건비를 크게 줄입니다.

  • FP16 정확도의 경우 비즈니스 멀티 태스크 (인코더는 BERT, 디코더는 GRU) 모델은 2ms / query성능 에 도달했습니다 .

  • BERT 기반 모델은 비즈니스 쿼리에 필요하지 않으며 온라인 기간이 크게 단축되며 FP16 정확도의 경우 1.1ms / query 의 성능 을 달성 합니다.

비즈니스에서 TurboNLP 추론의 성능은 교육 프레임 워크의 원활한 지원 및 기본 효율적인 추론 라이브러리의 지원과 분리 될 수 없습니다.

최신 진행

TurboNLP 추론의 저수준 효율적인 추론 라이브러리 중 하나 인 BertInference는 현재 INT8 추론최적화 된주의 계산을 지원합니다 . 성능 테스트를 위해 BERT 기반 텍스트 분류 비즈니스 모델과 실제 온라인 데이터를 사용했습니다. 효과는 다음과 같습니다.

batch_size = 64, seq_len = 64의 경우 성능은 0.126ms / query에 도달했으며 INT8 은 FP16에 비해 54.2 % 증가했습니다.

TurboNLP-inference는 INT8 보정을 지원하며 기존 모델을 사용하여 직접 보정 할 수 있습니다. 보정 프로세스는 구성을 통해 조정됩니다. 보정 프로세스는 간단합니다. 보정 후 INT8 정확도는 모델 추론에 직접 사용할 수 있습니다.

요약 및 전망

NLP 통합 도구 (TurboNLP-exp 교육 프레임 워크 및 TurboNLP- 추론 프레임 워크)는 이제 TEG AI 워킹 그룹 내에서 발전했습니다. 사전 교육 모델에도 일부 협력 애플리케이션이 있습니다. 동시에 우리는 또한 적극적으로 협력하고 있습니다. AI 워킹 그룹의 컴퓨팅 태극권 기계 학습 플랫폼 팀은 플랫폼에서 교육 기능을 더 잘 개방하기 위해 적극적으로 협력합니다. 다음으로 교육 및 추론 프레임 워크는 TencentNLP의 통합 협업 oteam에서도 발전 할 것이며, 회사 내에서 더 많은 팀 협력을 기대합니다.

TurboNLP 추론의 BERT 추론 가속화는 여전히 INT8 정확도 모델의 효과를 더욱 개선 할 여지가 있습니다. 현재는 QAT 및 지식 증류에 초점을 맞추고 있습니다. QAT는 현재 5 개 카테고리 BERT 기반 모델에서 측정됩니다. 정확도는 0.8 % 감소 , 지식 증류 추가 정확도가 떨어지지 않을 것으로 예상됩니다.

더:

추천

출처blog.csdn.net/Tencent_TEG/article/details/113409057