목차
1 학습 데이터 파이프라인의 구조
2. Tensorflow tf.data API
3 데이터의 다중 프로세스 병렬화를 사용합니다. 파이프라인
4. Ray를 사용하여 데이터 파이프라인을 병렬화합니다.
기술 주변기기 일체 포함 Ray를 사용하여 효율적인 딥 러닝 데이터 파이프라인 생성

Ray를 사용하여 효율적인 딥 러닝 데이터 파이프라인 생성

Nov 02, 2023 pm 08:17 PM
딥러닝 ray

딥 러닝 모델 훈련에 필요한 GPU는 강력하지만 비용이 많이 듭니다. GPU를 완전히 활용하려면 개발자는 다음 훈련 단계를 계산할 준비가 되었을 때 데이터를 GPU로 신속하게 전송할 수 있는 효율적인 데이터 전송 채널이 필요합니다. Ray를 사용하면 데이터 전송 채널의 효율성이 크게 향상될 수 있습니다

1 학습 데이터 파이프라인의 구조

먼저 모델 학습의 의사코드를 살펴보겠습니다

for step in range(num_steps):sample, target = next(dataset) # 步骤1train_step(sample, target) # 步骤2
로그인 후 복사

1단계에서 샘플과 라벨을 얻습니다. 다음 미니 배치. 2단계에서는 GPU에 복사하는 train_step 함수로 전달되고 정방향 및 역방향 전달을 수행하여 손실과 기울기를 계산하고 최적화 프로그램의 가중치를 업데이트합니다.

1단계에 대해 자세히 알아보세요. 데이터 세트가 너무 커서 메모리에 맞지 않는 경우 1단계에서는 디스크나 네트워크에서 다음 미니 배치를 가져옵니다. 또한 1단계에는 일정량의 전처리도 포함됩니다. 입력 데이터는 모델에 제공되기 전에 숫자 텐서 또는 텐서 모음으로 변환되어야 합니다. 경우에 따라 모델에 전달되기 전에 정규화, 축 중심 회전, 임의 섞기 등과 같은 다른 변환도 텐서에서 수행됩니다.

워크플로가 순서대로 엄격하게 실행되는 경우, 즉 1단계가 먼저 수행됩니다. , 그리고 2단계를 수행하면 모델은 항상 다음 데이터 배치의 입력, 출력 및 전처리 작업을 기다려야 합니다. GPU는 효율적으로 활용되지 않으며 다음 미니 배치 데이터를 로드하는 동안 유휴 상태로 유지됩니다.

이 문제를 해결하기 위해 데이터 파이프라인을 생산자-소비자 문제로 볼 수 있습니다. 데이터 파이프라인은 소규모 데이터 배치를 생성하여 제한된 버퍼에 씁니다. 모델/GPU는 버퍼에서 데이터의 미니 배치를 사용하고 정방향/역방향 계산을 수행하며 모델 가중치를 업데이트합니다. 데이터 파이프라인이 모델/GPU가 사용하는 만큼 빠르게 소규모 데이터 배치를 생성할 수 있다면 훈련 프로세스가 매우 효율적일 것입니다.

Ray를 사용하여 효율적인 딥 러닝 데이터 파이프라인 생성Pictures

2. Tensorflow tf.data API

Tensorflow tf.data API는 백그라운드 스레드를 사용하여 소규모 데이터 배치를 얻는 등 데이터 파이프라인을 효율적으로 생성하는 데 사용할 수 있는 풍부한 기능 세트를 제공합니다. 모델은 기다릴 필요가 없습니다. 데이터를 미리 가져오는 것만으로는 충분하지 않습니다. 소규모 데이터 배치를 생성하는 것이 GPU가 데이터를 사용할 수 있는 것보다 느린 경우 병렬화를 사용하여 데이터 읽기 및 변환 속도를 높여야 합니다. 이를 위해 Tensorflow는 여러 스레드를 활용하여 데이터를 병렬로 읽는 인터리브 기능과 여러 스레드를 사용하여 소규모 데이터 배치를 변환하는 병렬 매핑 기능을 제공합니다.

이러한 API는 멀티스레딩을 기반으로 하기 때문에 Python GIL(Global Interpreter Lock)에 의해 제한될 수 있습니다. Python의 GIL은 바이트코드를 한 번에 실행되는 단일 스레드로만 제한합니다. 파이프라인에서 순수 TensorFlow 코드를 사용하는 경우 TensorFlow 핵심 실행 엔진이 GIL 범위 외부에서 작동하기 때문에 일반적으로 이러한 제한이 발생하지 않습니다. 그러나 사용된 타사 라이브러리가 GIL 제한을 해제하지 않거나 Python을 사용하여 많은 계산을 수행하는 경우 멀티스레딩을 사용하여 파이프라인을 병렬화하는 것은 불가능합니다

3 데이터의 다중 프로세스 병렬화를 사용합니다. 파이프라인

다음 생성기 함수를 고려해 보세요. 이 함수는 데이터 샘플과 레이블의 미니 배치를 생성하기 위해 일부 계산 로드 및 수행을 시뮬레이션합니다.

def data_generator():for _ in range(10):# 模拟获取# 从磁盘/网络time.sleep(0.5)# 模拟计算for _ in range(10000):passyield (np.random.random((4, 1000000, 3)).astype(np.float32), np.random.random((4, 1)).astype(np.float32))
로그인 후 복사

다음으로, 더미 훈련 파이프라인에서 생성기를 사용하고 미니 배치 데이터를 생성하는 데 걸리는 평균 시간을 측정합니다.

generator_dataset = tf.data.Dataset.from_generator(data_generator,output_types=(tf.float64, tf.float64),output_shapes=((4, 1000000, 3), (4, 1))).prefetch(tf.data.experimental.AUTOTUNE)st = time.perf_counter()times = []for _ in generator_dataset:en = time.perf_counter()times.append(en - st)# 模拟训练步骤time.sleep(0.1)st = time.perf_counter()print(np.mean(times))
로그인 후 복사

평균 소요 시간은 약 0.57초인 것으로 관찰되었습니다(Intel Core i7 프로세서를 탑재한 Mac 노트북에서 측정). 이것이 실제 훈련 루프라면 GPU 활용도는 상당히 낮을 것입니다. 계산에 0.1초만 소요되고 다음 데이터 배치를 기다리며 0.57초 동안 유휴 상태로 유지됩니다.

데이터 로딩 속도를 높이려면 다중 프로세스 생성기를 사용할 수 있습니다.

from multiprocessing import Queue, cpu_count, Processdef mp_data_generator():def producer(q):for _ in range(10):# 模拟获取# 从磁盘/网络time.sleep(0.5)# 模拟计算for _ in range(10000000):passq.put((np.random.random((4, 1000000, 3)).astype(np.float32),np.random.random((4, 1)).astype(np.float32)))q.put("DONE")queue = Queue(cpu_count()*2)num_parallel_processes = cpu_count()producers = []for _ in range(num_parallel_processes):p = Process(target=producer, args=(queue,))p.start()producers.append(p)done_counts = 0while done_counts <p>이제 다음 미니 배치 데이터를 기다리는 데 소요된 시간을 측정하면 평균 0.08초를 얻습니다. 이는 거의 7배의 속도 향상이지만 이상적으로는 이 시간이 0에 가까워지기를 바랍니다. </p><p>분석해 보면 데이터의 역직렬화를 준비하는 데 상당한 시간이 소요되는 것을 알 수 있습니다. 다중 프로세스 생성기에서 생산자 프로세스는 메인 프로세스에서 준비한 다음 역직렬화해야 하는 대규모 NumPy 배열을 반환합니다. 그렇다면 프로세스 간에 대규모 배열을 전달할 때 효율성을 향상시키는 방법은 무엇입니까? </p><h2 id="Ray를-사용하여-데이터-파이프라인을-병렬화합니다">4. Ray를 사용하여 데이터 파이프라인을 병렬화합니다.</h2><p>여기서 Ray가 사용됩니다. Ray는 Python에서 분산 컴퓨팅을 실행하기 위한 프레임워크입니다. 서로 다른 프로세스 간에 객체를 효율적으로 전송하기 위해 공유 메모리 객체 저장소가 함께 제공됩니다. 특히, 객체 저장소의 Numpy 배열은 직렬화 및 역직렬화 없이 동일한 노드의 워커 간에 공유될 수 있습니다. 또한 Ray를 사용하면 여러 시스템에 걸쳐 데이터 로드를 쉽게 확장하고 Apache Arrow를 사용하여 대규모 어레이를 효율적으로 직렬화 및 역직렬화할 수 있습니다. </p><p>Ray에는 병렬 반복자를 생성할 수 있는 유틸리티 함수 from_iterators가 함께 제공되며 개발자는 이를 사용하여 data_generator 생성기 함수를 래핑할 수 있습니다. </p><pre class="brush:php;toolbar:false">import raydef ray_generator():num_parallel_processes = cpu_count()return ray.util.iter.from_iterators([data_generator]*num_parallel_processes).gather_async()
로그인 후 복사

ray_generator를 사용하여 다음 미니 배치 데이터를 기다리는 데 소요되는 시간은 0.02초로 측정되었으며 이는 다중 프로세스 처리를 사용하는 것보다 4배 빠릅니다.

위 내용은 Ray를 사용하여 효율적인 딥 러닝 데이터 파이프라인 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Python에서 BERT를 사용한 감정 분석 방법 및 단계 Python에서 BERT를 사용한 감정 분석 방법 및 단계 Jan 22, 2024 pm 04:24 PM

BERT는 Google이 2018년에 제안한 사전 훈련된 딥러닝 언어 모델입니다. 전체 이름은 BidirectionEncoderRepresentationsfromTransformers이며 Transformer 아키텍처를 기반으로 하며 양방향 인코딩의 특성을 가지고 있습니다. 기존 단방향 코딩 모델과 비교하여 BERT는 텍스트를 처리할 때 상황 정보를 동시에 고려할 수 있으므로 자연어 처리 작업에서 잘 수행됩니다. 양방향성을 통해 BERT는 문장의 의미 관계를 더 잘 이해할 수 있어 모델의 표현 능력이 향상됩니다. 사전 훈련 및 미세 조정 방법을 통해 BERT는 감정 분석, 이름 지정 등 다양한 자연어 처리 작업에 사용될 수 있습니다.

일반적으로 사용되는 AI 활성화 함수 분석: Sigmoid, Tanh, ReLU 및 Softmax의 딥러닝 실습 일반적으로 사용되는 AI 활성화 함수 분석: Sigmoid, Tanh, ReLU 및 Softmax의 딥러닝 실습 Dec 28, 2023 pm 11:35 PM

활성화 기능은 딥 러닝에서 중요한 역할을 하며 신경망에 비선형 특성을 도입하여 네트워크가 복잡한 입력-출력 관계를 더 잘 학습하고 시뮬레이션할 수 있도록 합니다. 활성화 함수의 올바른 선택과 사용은 신경망의 성능과 훈련 결과에 중요한 영향을 미칩니다. 이 기사에서는 일반적으로 사용되는 네 가지 활성화 함수인 Sigmoid, Tanh, ReLU 및 Softmax를 소개부터 시작하여 사용 시나리오, 장점, 단점과 최적화 솔루션은 활성화 기능에 대한 포괄적인 이해를 제공하기 위해 논의됩니다. 1. 시그모이드 함수 시그모이드 함수 공식 소개: 시그모이드 함수는 실수를 0과 1 사이에 매핑할 수 있는 일반적으로 사용되는 비선형 함수입니다. 통일하기 위해 자주 사용됩니다.

ORB-SLAM3를 넘어! SL-SLAM: 저조도, 심한 흔들림, 약한 텍스처 장면을 모두 처리합니다. ORB-SLAM3를 넘어! SL-SLAM: 저조도, 심한 흔들림, 약한 텍스처 장면을 모두 처리합니다. May 30, 2024 am 09:35 AM

이전에 작성했던 오늘은 딥 러닝 기술이 복잡한 환경에서 비전 기반 SLAM(동시 위치 파악 및 매핑)의 성능을 향상할 수 있는 방법에 대해 논의합니다. 심층 특징 추출과 깊이 일치 방법을 결합하여 저조도 조건, 동적 조명, 질감이 약한 영역 및 심한 지터와 같은 까다로운 시나리오에서 적응을 향상하도록 설계된 다목적 하이브리드 시각적 SLAM 시스템을 소개합니다. 우리 시스템은 확장 단안, 스테레오, 단안 관성 및 스테레오 관성 구성을 포함한 여러 모드를 지원합니다. 또한 시각적 SLAM을 딥러닝 방법과 결합하여 다른 연구에 영감을 주는 방법도 분석합니다. 공개 데이터 세트 및 자체 샘플링 데이터에 대한 광범위한 실험을 통해 위치 정확도 및 추적 견고성 측면에서 SL-SLAM의 우수성을 입증합니다.

잠재 공간 임베딩: 설명 및 시연 잠재 공간 임베딩: 설명 및 시연 Jan 22, 2024 pm 05:30 PM

잠재 공간 임베딩(LatentSpaceEmbedding)은 고차원 데이터를 저차원 공간에 매핑하는 프로세스입니다. 기계 학습 및 딥 러닝 분야에서 잠재 공간 임베딩은 일반적으로 고차원 입력 데이터를 저차원 벡터 표현 세트로 매핑하는 신경망 모델입니다. 이 벡터 세트를 "잠재 벡터" 또는 "잠재 벡터"라고 합니다. 인코딩". 잠재 공간 임베딩의 목적은 데이터의 중요한 특징을 포착하고 이를 보다 간결하고 이해하기 쉬운 형식으로 표현하는 것입니다. 잠재 공간 임베딩을 통해 저차원 공간에서 데이터를 시각화, 분류, 클러스터링하는 등의 작업을 수행하여 데이터를 더 잘 이해하고 활용할 수 있습니다. 잠재 공간 임베딩은 이미지 생성, 특징 추출, 차원 축소 등과 같은 다양한 분야에서 폭넓게 응용됩니다. 잠재공간 임베딩이 핵심

하나의 기사로 이해하기: AI, 머신러닝, 딥러닝 간의 연결과 차이점 하나의 기사로 이해하기: AI, 머신러닝, 딥러닝 간의 연결과 차이점 Mar 02, 2024 am 11:19 AM

오늘날 급속한 기술 변화의 물결 속에서 인공지능(AI), 머신러닝(ML), 딥러닝(DL)은 정보기술의 새로운 물결을 이끄는 밝은 별과도 같습니다. 이 세 단어는 다양한 최첨단 토론과 실제 적용에 자주 등장하지만, 이 분야를 처음 접하는 많은 탐험가들에게는 그 구체적인 의미와 내부 연관성이 여전히 수수께끼에 싸여 있을 수 있습니다. 그럼 먼저 이 사진을 보시죠. 딥러닝, 머신러닝, 인공지능 사이에는 밀접한 상관관계와 진보적인 관계가 있음을 알 수 있습니다. 딥러닝은 머신러닝의 특정 분야이며, 머신러닝은

기초부터 실습까지 Elasticsearch 벡터 검색의 개발 이력을 검토해보세요. 기초부터 실습까지 Elasticsearch 벡터 검색의 개발 이력을 검토해보세요. Oct 23, 2023 pm 05:17 PM

1. 소개 벡터 검색은 현대 검색 및 추천 시스템의 핵심 구성 요소가 되었습니다. 복잡한 객체(예: 텍스트, 이미지, 사운드)를 수치 벡터로 변환하고 다차원 공간에서 유사성 검색을 수행하여 효율적인 쿼리 매칭 및 추천을 가능하게 합니다. 기초부터 실습까지 Elasticsearch의 개발 이력을 살펴보세요. 벡터 검색_elasticsearch 유명한 오픈 소스 검색 엔진으로서 Elasticsearch의 벡터 검색 분야 개발은 항상 많은 관심을 받아왔습니다. 본 글에서는 각 단계의 특징과 진행 상황을 중심으로 Elasticsearch 벡터 검색의 개발 역사를 검토해 보겠습니다. 기록을 가이드로 삼아 모든 사람이 전체 범위의 Elasticsearch 벡터 검색을 설정하는 것이 편리합니다.

매우 강하다! 딥러닝 알고리즘 상위 10개! 매우 강하다! 딥러닝 알고리즘 상위 10개! Mar 15, 2024 pm 03:46 PM

2006년 딥러닝이라는 개념이 제안된 지 거의 20년이 지났습니다. 딥러닝은 인공지능 분야의 혁명으로 많은 영향력 있는 알고리즘을 탄생시켰습니다. 그렇다면 딥러닝을 위한 상위 10가지 알고리즘은 무엇이라고 생각하시나요? 다음은 제가 생각하는 딥 러닝을 위한 최고의 알고리즘입니다. 이들은 모두 혁신, 애플리케이션 가치 및 영향력 측면에서 중요한 위치를 차지하고 있습니다. 1. 심층 신경망(DNN) 배경: 다층 퍼셉트론이라고도 불리는 심층 신경망(DNN)은 가장 일반적인 딥 러닝 알고리즘으로 처음 발명되었을 때 최근까지 컴퓨팅 성능 병목 현상으로 인해 의문을 제기했습니다. 20년, 컴퓨팅 파워, 데이터의 폭발적인 증가로 돌파구가 찾아왔습니다. DNN은 여러 개의 숨겨진 레이어를 포함하는 신경망 모델입니다. 이 모델에서 각 레이어는 입력을 다음 레이어로 전달하고

단백질과 모든 살아있는 분자의 상호 작용과 구조를 이전보다 훨씬 더 정확하게 예측하는 AlphaFold 3 출시 단백질과 모든 살아있는 분자의 상호 작용과 구조를 이전보다 훨씬 더 정확하게 예측하는 AlphaFold 3 출시 Jul 16, 2024 am 12:08 AM

Editor | Radish Skin 2021년 강력한 AlphaFold2가 출시된 이후 과학자들은 단백질 구조 예측 모델을 사용하여 세포 내 다양한 ​​단백질 구조를 매핑하고 약물을 발견하며 알려진 모든 단백질 상호 작용에 대한 "우주 지도"를 그려 왔습니다. 방금 Google DeepMind는 단백질, 핵산, 소분자, 이온 및 변형된 잔기를 포함한 복합체에 대한 결합 구조 예측을 수행할 수 있는 AlphaFold3 모델을 출시했습니다. AlphaFold3의 정확도는 과거의 많은 전용 도구(단백질-리간드 상호작용, 단백질-핵산 상호작용, 항체-항원 예측)에 비해 크게 향상되었습니다. 이는 단일 통합 딥러닝 프레임워크 내에서 다음을 달성할 수 있음을 보여줍니다.

See all articles