1. 배경 소개
ByteDance에서는 딥 러닝 기반 애플리케이션이 곳곳에서 피어나고 있지만, 초기에는 온라인 서비스의 일관성과 성능에도 주의를 기울여야 합니다. 일반적으로 알고리즘 전문가와 엔지니어링 전문가 간의 업무 분담이 필요하며, 이 모드는 diff 문제 해결 및 검증과 같은 비용이 상대적으로 높습니다.
PyTorch/TensorFlow 프레임워크의 인기로 인해 딥 러닝 모델 훈련과 온라인 추론이 통합되었습니다. 개발자는 특정 알고리즘 로직에 주의하고 프레임워크의 Python API를 호출하기만 하면 훈련 검증 프로세스를 완료할 수 있습니다. , 모델을 쉽게 내보낼 수 있으며 추론 작업은 통합된 고성능 C++ 엔진에 의해 완료됩니다. 교육부터 배포까지 개발자 경험이 향상되었습니다.
그러나 완전한 서비스에는 일반적으로 전처리/후처리와 같은 많은 비즈니스 로직이 있습니다. 이러한 유형의 로직은 일반적으로 Tensor에 대한 다양한 입력을 처리한 다음 모델의 출력 Tensor에 입력합니다. Target 형식으로 처리되며 몇 가지 일반적인 시나리오는 다음과 같습니다.
- Bert
- Resnet
저희 목표는 위의 엔드투엔드 프로세스에 대해 자동화되고 통합된 교육 및 추론 솔루션을 제공하는 것입니다. , 추론 프로세스의 수동 개발, 정렬 차이 및 기타 문제를 완화하여 대규모 통합 배포 솔루션을 달성합니다.
2. 핵심 문제
PyTorch/TensorFlow 및 기타 프레임워크는 통일된 모델 훈련/추론 문제를 상대적으로 해결했기 때문에 모델 계산 자체에는 훈련과 추론을 통합하는 문제가 없습니다(운영자 성능 최적화는 범위에 속하지 않습니다). 이 토론의 내용).
해결해야 할 핵심 문제는 전처리 및 후처리를 통해 고성능 교육 및 푸시 통합 솔루션을 제공해야 한다는 것입니다.
이런 종류의 논리를 위해 TensorFlow 2.x는 tf.function(아직 완성되지 않음)을 제공하고 PyTorch는 예외 없이 기본 Python 구문의 하위 집합을 선택하는 TorchScript를 제공합니다. 하지만 그렇게 강력하더라도 여전히 무시할 수 없는 문제가 있습니다.
- 성능: 이 솔루션은 대부분 가상 머신 구현을 기반으로 합니다. 가상 머신 솔루션은 유연하고 제어가 용이하지만 대부분의 가상 머신은 딥 러닝 프레임워크에 있습니다. 일반적으로 성능이 충분하지 않습니다. 보완적으로 프레임워크는 초기에 Tensor 컴퓨팅을 위해 설계되었습니다. 어레이 컴퓨팅의 각 운영자의 비용은 매우 높으며 가상 머신 파견 및 스케줄링 비용은 무시할 수 있습니다. 그러나 프로그래밍 언어 프로그래밍으로의 포팅에 따른 오버헤드는 무시하기 어렵고 너무 많은 코드를 작성하면 성능 병목 현상이 발생합니다. 테스트에 따르면 TorchScript 인터프리터의 성능은 Python의 약 1/5에 불과하며 tf.function의 성능은 더욱 나쁩니다.
- 미완성 함수: 실제로 실제 시나리오에 적용하면 tf.function/TorchScript가 지원하지 않는 많은 중요한 함수를 찾을 수 있습니다. 예를 들어 사용자 정의 리소스는 패키징할 수 없으며 내장된 문자열만 직렬화할 수 있습니다. 바이트 처리를 수행할 때 중국어와 같은 유니코드는 차이를 유발합니다. 컨테이너는 동형이어야 하며 사용자 정의 유형 등을 지원하지 않습니다...
게다가 딥러닝이 아닌 작업도 여전히 많습니다. 자연어 처리에서 딥러닝이 아닌 작업 시퀀스 주석, 언어 모델 디코딩, 트리 모델의 인공적 특징 구성 등과 같은 딥러닝의 응용 프로그램 또는 하위 작업. 이들은 일반적으로 더 유연한 기능 패러다임을 가지고 있지만 동시에 아직 엔드투엔드 트레이닝 및 푸시 통합 솔루션이 완벽하게 구현되지 않았습니다. 아직 개발 및 정확성 검증 작업이 많이 남아 있습니다.
위 문제를 해결하기 위해 우리는 컴파일 기반 전처리 솔루션인 MATXScript를 개발했습니다!
3. MATXScript
딥러닝 알고리즘을 개발할 때 개발자는 빠른 반복과 실험을 위해 Python을 사용하는 반면, 고성능 온라인 서비스를 개발하려면 C++를 사용하므로 정확성 검증 및 서비스 개발 부담이 더 커집니다!
MatxScript(https://github.com/bytedance/matxscript)는 Python 하위 언어용 AOT 컴파일러로, 자동으로 Python을 C++로 변환하고 원클릭 패키징 및 게시 기능을 제공할 수 있습니다. MATXScript를 사용하면 개발자는 저렴한 비용으로 고성능 서비스를 배포하는 동시에 모델을 빠르게 반복할 수 있습니다.
핵심 아키텍처는 다음과 같습니다.
- 가장 낮은 계층은 고성능 연산자 전문가가 개발한 순수 C++/CUDA 기본 라이브러리입니다.
- 기본 라이브러리 위에 Python 라이브러리가 규칙에 따라 캡슐화되어 학습 과정에서 사용할 수 있습니다.
- 추론이 필요한 경우 MATXScript를 사용하여 Python 코드를 동등한 C++ 코드로 변환하고, 이를 동적 링크 라이브러리로 컴파일하고, 모델 및 기타 종속 리소스를 추가하고, 함께 패키징하여 게시할 수 있습니다.
그 중 컴파일러의 역할은 매우 중요하며, 그 핵심 프로세스는 다음과 같습니다.
위의 프로세스를 통해 사용자가 작성한 전처리 코드를 파이프라인에서 JitOp로 컴파일할 수 있으며, 전처리 및 후처리를 모델과 연결하기 위해 우리는 다음 아키텍처를 갖춘 추적 시스템(인터페이스 디자인은 PyTorch를 참조함)도 개발했습니다.
MATXScript를 기반으로 동일한 것을 사용할 수 있습니다 훈련 및 추론을 위한 코드 세트를 제공하여 모델 배포 비용을 크게 절감합니다. 동시에 아키텍처와 알고리즘이 분리되어 알고리즘 학생들은 전적으로 Python에서 작업할 수 있습니다. 아키텍처 학생들은 컴파일러 개발 및 런타임 최적화에 집중합니다. ByteDance에서 이 솔루션은 대규모 배포로 검증되었습니다!
4. 간단한 테스트
여기에서는 MATXScript 사용 방법을 보여주기 위해 가장 간단한 영어 텍스트 전처리를 예로 들었습니다.
목표: 영어 텍스트를 인덱스로 변환
- 기본 사전 조회 로직 작성
class Text2Ids: def __init__(self) -> None: self.table: Dict[str, int] = { "hello": 0, "world": 1, "[UNK]": 2, } def lookup(self, word: str) return self.table.get(word, 2) def__call__ (self, words: List[str]) return [self.lookup(w) for w in words]
- Write Pipeline
import matx class WorkFlow: def __init__(self): # 此处会进行代码编译,Python 代码自动编译封装为 Callable 对象 self.text2ids = matx.script(Text2Ids)() def process(self, texts): ids = self.text2ids(texts) return ids # test handler = WorkFlow() print(handler.process("hello world unknown")) # output: [0, 1, 2]
- 디스크로 내보내기 추적
# dump mod = matx.trace(handler.process, "hello world") print(mod.run({"texts": "hello world"})) mod.save('./my_dir') # load mod = matx.load('./my_dir', -1) print(mod.run({"texts": "hello world"}))
- C++ load
#include <string> #include <vector> #include <map> #include <iostream> #include <matxscript/pipeline/tx_session.h> using namespace ::matxscript::runtime; int main() { // test case std::unordered_map<std::string, RTValue> feed_dict; feed_dict.emplace("texts", Unicode(U"hello world")); std::vector<std::pair<std::string, RTValue>> result; const char* module_path = "./my_dir"; const char* module_name = "model.spec.json"; { // -1 mean cpu auto sess = TXSession::Load(module_path, module_name, -1); auto result = sess->Run(feed_dict); for (auto& r : result) { std::cout << "key: " << r.first << ", value: " << r.second << std::endl; } } return 0; }
완료 코드는 https://github.com/bytedance/matxscript/tree/main/examples/text2ids
요약: 위는 순수 Python으로 구현된 매우 간단한 전처리 로직이며 일반 C++로 로드할 수 있습니다. 코드 실행, 모델을 결합하여 실제 멀티모달 엔드투엔드 사례를 보여드리겠습니다!
5. 다중 모달 사례
여기서는 그래픽 및 텍스트 다중 모달(Bert+Resnet)을 예로 들어 모델이 훈련 및 배포의 실제 작업을 보여주기 위해 작성되었습니다.
- 환경 구성
a. gcc/cuda 등의 인프라 구성(보통 운영 및 유지보수 학생들이 이미 수행함)
b MATXScript 및 이를 기반으로 개발된 기본 라이브러리 설치(텍스트, 비전 등) - 모델 코드 작성
a. 논문이나 기타 오픈 소스 구현을 참조하여 직접 수행할 수 있습니다. - 전처리 코드 작성
a. text
from typing import List, Dict, Tuple import libcut import matx class Vocabulary: ... def utf8_decoder(s: List[bytes]): return [x.decode() for x in s] class TextNDArrayBuilder: ... class TextPipeline: def __init__(self, mode: str = "eval"): self.mode = mode self.cut_engine = libcut.Cutter('/path/to/cut_models', ...) self.vocab = matx.script(Vocabulary)('/path/to/vocab.txt') self.decoder = matx.script(utf8_decoder) self.input_builder = matx.script(TextNDArrayBuilder)(self.vocab) def process(self, text: List[bytes]): # List[bytes] 是对齐 C++ 的 vector<string> text: List[str] = self.decoder(text) words: List[List[str]] = self.cut_engine(text) batch_ids: List[List[int]] = self.vocab(words) input_ids, segment_ids, mask_ids = self.input_builder(batch_ids, 32) if self.mode == "train": return input_ids.torch(), segment_ids.torch(), mask_ids.torch() return input_ids, segment_ids, mask_idsDataLoader에 연결합니다.
- a. TextPipeline은 일반 Python 클래스로 사용할 수 있습니다. Dataset에 연결하기만 하면 됩니다.
- b. VisionPipeline은 GPU 전처리를 포함하며 일괄 처리에 더 적합합니다. DataLoader를 별도로 구성해야 합니다. 나중에 ByteDance의 내부 멀티스레드 DataLoader)
추가 모델 코드 업로드 및 훈련 시작 - 종단 간 추론 모델 내보내기
from typing import List, Dict, Tuple import matx from matx import vision class VisionPipeline: def __init__(self, device_id: int = 0, mode: str = "eval", image_size: int = 224,): self.is_training = mode == 'train' self.mode = mode ... def process(self, image,): if self.is_training: decode_nds = self.random_crop_decode(image) flip_nds = self.random_flip(decode_nds) resize_nds = self.resize(flip_nds) transpose_nd = self.transpose_norm(resize_nds, vision.SYNC) else: decode_nds = self.decode(image) resize_nds = self.resize(decode_nds) crop_nds = self.center_crop(resize_nds) transpose_nd = self.transpose_norm(crop_nds, vision.SYNC) if self.mode == "trace": return transpose_nd return transpose_nd.torch()
요약: 위 단계를 완료하면 종단 간 훈련을 완료할 수 있습니다. 작업을 릴리스하고 전체 프로세스는 순수 Python 코드로 완료되며 알고리즘 학생들이 직접 제어하여 완전히 완료할 수 있습니다. 물론, 모델 계산 자체에 성능 문제가 있는 경우 자동 이미지 수정 및 최적화를 통해 백그라운드에서 완료할 수도 있습니다.
참고: 전체 코드 예제는 https://github.com/bytedance/matxscript/tree/main/examples/e2e_multi_modal
6을 참조하세요. Unified Server
마지막 장에서는 알고리즘 학생, 이 장에서는 통합 서비스를 사용하여 로드하고 실행하는 방법을 설명합니다.
완전한 서버에는 다음이 포함됩니다: IDL 프로토콜, 일괄 처리 전략, 스레드/스레드 예약 및 배열, 모델 추론...
여기에서는 모델 추론만 논의하고 나머지는 합의된 대로 개발할 수 있습니다. 모델 로드 및 실행 과정을 설명하기 위해 기본 함수를 사용합니다.
class MultimodalEvalPipeline: def __init__(self): self.text_pipe = TextPipeline(mode="eval", ...) self.vision_pipe = VisionPipeline(mode="eval", ...) self.torch_model = torch.jit.load('/path/to/multimodal.jit', map_locatinotallow='cuda:0') self.tx_model_op = matx.script(self.torch_model, device=0) def eval(self, texts: List[bytes], images: List[bytes]) input_ids, segment_ids, mask_ids = self.text_pipe.process(texts) images = self.vision_pipe.process(images) scores = self.tx_model_op(input_ids, segment_ids, mask_ids, images) return scores # examples example_batch_size = 8 text_examples = ['hello, world'.encode()] * example_batch_size with open('/path/image.jpg', 'rb') as f: image_example = f.read() image_examples = [image_example] * example_batch_size # pipeline instance pipe = MultimodalEvalPipeline(...) mod = matx.trace(pipe.eval, text_examples, image_examples) # test print(mod.run({"texts": text_examples, "images": image_examples})) # save mod.save('/path/to/my_multimodal')
위 코드는 C++에서 다중 모달 모델을 로드하는 가장 간단한 사례입니다. 서버를 개발하는 학생들의 경우 간단한 추상화와 규칙만 만들면 됩니다. 위의 코드는 통합된 C++ 모델 서비스 프레임워크로 변환될 수 있습니다.
VII. 추가 정보
우리는 회사에 통합된 고성능 교육 및 프로모션 통합 프레임워크를 제공하고 Volcano Engine 머신 러닝 플랫폼을 통해 협력을 제공하는 데 전념하는 Bytedance-AML-머신 러닝 시스템 팀입니다. 기업의 경우 Volcano Engine 기계 학습 플랫폼은 2023년부터 미리 설정된 미러 환경, 일반 시나리오의 공개 샘플, 기업 액세스 및 사용 중 기술 지원 등을 포함하여 MATX 관련 지원을 제공할 것으로 예상되며 이를 통해 저비용 교육 및 추론을 달성할 수 있습니다. 시나리오 가속 및 통합 효과. https://www.volcengine.com/product/ml-platform에서 당사 제품에 대해 자세히 알아보십시오.
위 내용은 바이트댄스 모델 대규모 전개 실전의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

대형 언어 모델 (LLM)은 인기가 높아졌으며, 도구 전달 기능은 단순한 텍스트 생성을 넘어 기능을 극적으로 확장했습니다. 이제 LLM은 동적 UI 생성 및 자율적 인 A와 같은 복잡한 자동화 작업을 처리 할 수 있습니다.

비디오 게임이 불안을 완화하거나 집중하거나 ADHD를 가진 어린이를 지원할 수 있습니까? 건강 관리 도전이 전 세계적으로 급증함에 따라, 특히 청소년들 사이에서 혁신가들은 비디오 게임 인 가능성이없는 도구로 전환하고 있습니다. 이제 세계 최대의 엔터테인먼트 인더스 중 하나입니다

UNCTAD의 사무 총장 인 Rebeca Grynspan은“역사는 기술 진보가 경제 성장을 유발하거나 공평한 소득 분배를 보장하거나 포용적인 인간 발전을 촉진하지는 않습니다.

쉽게 생성 AI를 협상 교사 및 스파링 파트너로 사용하십시오. 그것에 대해 이야기합시다. 혁신적인 AI 혁신에 대한이 분석은 AI의 최신 Forbes 열 범위의 일부입니다.

밴쿠버에서 개최 된 TED2025 컨퍼런스는 어제 4 월 11 일 36 번째 판을 마무리했습니다. Sam Altman, Eric Schmidt 및 Palmer Luckey를 포함한 60 개 이상의 국가에서 80 명의 스피커를 선보였습니다. 테드의 주제 인“인류를 다시 상상했다”는 재단사가 만들어졌다

Joseph Stiglitz는 2001 년에 유명한 경제학자이자 노벨 경제학상을 수상했습니다. Stiglitz는 AI가 기존의 불평등과 통합 된 권력을 몇몇 지배적 인 기업의 손에 악화시킬 수 있으며 궁극적으로 경제를 훼손 할 수 있다고 주장합니다.

그래프 데이터베이스 : 관계를 통한 데이터 관리 혁명 데이터가 확장되고 그 특성이 다양한 필드에서 발전함에 따라 그래프 데이터베이스는 상호 연결된 데이터를 관리하기위한 변환 솔루션으로 떠오르고 있습니다. 전통적인 것과는 달리

대형 언어 모델 (LLM) 라우팅 : 지능형 작업 분포를 통한 성능 최적화 LLM의 빠르게 진화하는 환경은 각각 독특한 강점과 약점을 가진 다양한 모델을 제시합니다. 일부는 Creative Content Gen에서 탁월합니다


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Dreamweaver Mac版
시각적 웹 개발 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
