Yapay zeka veya tam yığın geliştirme ile mücadele mi ediyorsunuz? Uzmanlarımız size rehberlik etmek için burada: özel tavsiyeler, teknik entegrasyon ve daha fazlası. Bize ulaşın [email protected].

Doğal Dil İşleme Transformatörleri İçin Derin Öğrenme Çıkarımları Nasıl Hızlandırılır

Transformatörlere dayalı Doğal Dil İşleme için gelişmiş derin öğrenme modelleri etkileyici sonuçlar verir, ancak yüksek hız performansları zordur. Bu makalede, aşağıdakileri yapmak istiyorsanız sahip olduğunuz en iyi seçenekleri özetliyoruz üretimdeki tahminlerinizin gecikme süresini azaltın.

Daha iyi bir CPU veya GPU kullanın

Dönüştürücü tabanlı Doğal Dil İşleme modellerinin hızını artırmak istendiğinde, "naif" yaklaşım daha fazla dönüştürücü kullanmaktır. gelişmiş donanım.

Çoğu zaman bu kaçınılmaz bir çözümdür, çünkü saf yazılım tabanlı çözümlerin hepsinin sınırları vardır. Bir CPU üzerinde çıkarım yaptığınızı düşünün. Favori Transformer tabanlı modeliniz için düşük seviye optimizasyon üzerinde haftalarca çalışabilirsiniz, büyük olasılıkla, modelinizi daha hızlı bir modele taşıyarak daha iyi bir hız artışı elde edeceksiniz. NVIDIA A100 GPU.

Bugünlerde üretimde çıkarım için en yaygın kullanılan GPU'lar NVIDIA Tesla T4 ve V100'dür.

NVIDIA Tesla GPU

Peki ya donanımınızı zaten yükseltmişseniz? Ya da bütçeniz kısıtlıysa ve karşılayabilir Son teknoloji ürünü pahalı GPU'lardan yararlanmak mı istiyorsunuz? Aşağıdakileri okuyun!

Toplu Çıkarım

Toplu çıkarım, modelinize aynı anda birkaç istek göndermekle ilgilidir, bu nedenle tek seferde talep eder.

Toplu çıkarım çok güçlüdür, çünkü modelinizin aşağıdakileri ele alması neredeyse aynı zaman alacaktır bir isteği ele almak için gereken birkaç istek. Kaputun altında bazı işlemler çarpanlara ayrılacaktır, bu nedenle Her şeyi n kez yapmak yerine, modelin yalnızca bir kez yapması gerekir.

Teknik olarak konuşmak gerekirse, isteklerinizin gecikme süresini azaltmaz, çünkü istekleriniz daha hızlı adreslenir, ancak uygulamanızın verimini önemli ölçüde artıracaktır (uygulamanız aynı donanımla daha fazla isteği karşılayabilir).

Yine de toplu çıkarım mükemmel değildir.

İlk olarak, çevrimiçi çıkarım için (yani müşteriye dönük uygulamalar için) her zaman uygun değildir, çünkü Toplu işlerinizi oluşturmak için bazı kullanıcı isteklerini tamponlamanız gerekecektir, bu nedenle bazı kullanıcılar normalden daha uzun süre beklemek.

2. zorluk: toplu çıkarım benzer talepler için daha iyi çalışır. Örneğin, eğer bir metin oluşturma Doğal Dil İşleme modeli, toplu işlem, aşağıdaki istek gruplarını oluşturursanız daha verimli olacaktır aynı uzunluğa sahiptir.

Son olarak, toplu çıkarım derin öğrenme modelinizin kendisi tarafından değil, daha yüksek bir model tarafından gerçekleştirilir. düzey katman, özel bir çıkarım sunucusu gibi. Böyle bir katmanı uygulamak her zaman kolay değildir. İçin Örneğin, NVIDIA'nın Triton Çıkarım Sunucusu (aşağıya bakın) toplu çıkarım gerçekleştirmede çok iyidir, ama öncelikle modelinizi Triton ile uyumlu hale getirmenin bir yolunu bulmanız gerekir.

Modelinizi Triton'a aktarmayı başardığınızda, toplu çıkarım yapmak son derece basittir. Örneğin, burada 128'e kadar istekten oluşan gruplar oluşturmayı ve istekleri işlemeden önce en fazla 5 saniye beklemeyi batch ("config.pbtxt" dosyasına konulmalıdır).

max_batch_size: 128
dynamic_batching {
  max_queue_delay_microseconds: 5000000
}

Özel Uygulamalardan Yararlanın

Birçok kişi ve şirket, bazı Transformer tabanlı Doğal Dil İşleme için düşük seviye optimizasyonlar üzerinde yoğun bir şekilde çalışıyor modeller. Modelinizin bu özel uygulamalarından yararlanmak sizin için iyi bir fikir olabilir.

Çoğu zaman bu özel uygulamaların kullanımı kolaydır ve neredeyse hiç ek çalışma gerektirmez. Sen. Burada bazılarından bahsetmeme izin verin:

İşte DeepSpeed sayesinde GPT Neo 2.7B modeliniz için nasıl çıkarım yapabileceğinize dair bir örnek. Çok zor değil, değil mi?

# Filename: gpt-neo-2.7b-generation.py
import os
import deepspeed
import torch
from transformers import pipeline

local_rank = int(os.getenv('LOCAL_RANK', '0'))
world_size = int(os.getenv('WORLD_SIZE', '1'))
generator = pipeline('text-generation', model='EleutherAI/gpt-neo-2.7B',
                        device=local_rank)



generator.model = deepspeed.init_inference(generator.model,
                                            mp_size=world_size,
                                            dtype=torch.float,
                                            replace_method='auto')

string = generator("DeepSpeed is", do_sample=True, min_length=50)
if not torch.distributed.is_initialized() or torch.distributed.get_rank() == 0:
    print(string)         
            

Bu özel uygulamalardan birini kullanırken, yeni uygulamanızın kalitesini titizlikle test etmeyi unutmayın. modelinde olduğu gibi, bu yeni uygulamalarda hata olmadığından asla %100 emin olamazsınız.

Özel Bir Çıkarım Motoru Kullanın

Microsoft ve NVIDIA, çıkarımı iyileştirmek için gelişmiş çıkarım motorları üzerinde çalıştı performanslar.

ONNX Microsoft tarafından geliştirilen Runtime ("ORT"), platformlar arası bir çıkarım ve eğitim makine öğrenimi aracıdır. hızlandırıcı (buraya bakınız). NVIDIA tarafından geliştirilen TensorRT ("TRT"), yüksek performanslı derin öğrenmeye yönelik bir SDK'dır çıkarım. Derin öğrenme çıkarım iyileştiricisi ve düşük gecikme süresi sağlayan çalışma zamanı içerir. derin öğrenme çıkarım uygulamaları için yüksek verim (buraya bakınız).

Ek olarak, NVIDIA Triton Çıkarım Sunucusu, yapay zeka çıkarımı yapan bir çıkarım sunma yazılımıdır Yapay zeka modellerini çeşitli çerçevelerden dağıtmayı mümkün kılarak daha kolay. Triton sayesinde şunları yapabilirsiniz örnek toplu çıkarımı kolayca gerçekleştirin, aynı GPU üzerinde birden fazla derin öğrenme modelini eşzamanlı olarak çalıştırın, modelleri birden fazla GPU'ya dağıtın ve daha fazlasını yapın. Buraya bakın.

ONNX Runtime
TensorRT
Triton Inference Server

Yukarıdakiler heyecan verici görünüyor, ancak elbette o kadar basit değil... Modelinizin bunlardan yararlanabilmesi için özel çıkarım motorları için öncelikle mevcut modelinizi uygun bir formata dönüştürmeniz gerekir.

Birkaç seçeneğiniz var:

Yukarıdaki yöntemlerle oynarken, dışa aktarılan modellerinizin kalitesine çok dikkat etmelisiniz. Siz modelinizi başarılı bir şekilde dışa aktardığınızı düşünebilirsiniz, ancak Bu nedenle, yeni dışa aktarılan modelinizi nasıl test ettiğiniz konusunda çok titiz olun.

Sonuç

Modern dönüştürücü tabanlı Doğal Dil İşleme modelleri etkileyici sonuçlar veriyor, bu nedenle giderek daha fazla şirket bunları üretimde kullanmak. Ancak çoğu zaman performansların hayal kırıklığı yarattığı görülüyor...

Tahminlerinizin hızını artırmak için çalışmak çok önemlidir, ancak yukarıda görebileceğiniz gibi tek beden herkese uyan çözüm.

Çıkarımlarınızı nasıl hızlandıracağınızla ilgili sorularınız varsa, lütfen bizimle iletişime geçmekten çekinmeyin! Ya da altyapı ile uğraşmayın ve sadece NLP Cloud'a abone olun!

Julien Salinas
NLP Cloud'da CTO