text-processing ve onun ilişkili NLP APIs'u çalıştırıyorum ve bir Django uygulaması (nginx'in arkasında silah) tarafından yüklenen yaklaşık 2 düzine farklı turşu modeli kullanıyor. Modeller ihtiyaç duyulduklarında yüklenir ve bir kez yüklendikten sonra bellekte kalırlar. Yani, gun-parola sunucusunu yeniden başlattığımda, bir modele ihtiyaç duyan ilk talepler, yüklenmesi için birkaç saniye beklemek zorundadır, ancak sonraki her talep, RAM'de önbelleğe alınan modeli kullanmaya başlar. Yeniden başlatmalar yalnızca, genellikle modellerin güncellenmesini içeren yeni özellikler dağıttığımda olur, dolayısıyla onları yeniden yüklemem gerekir. Bu nedenle, kod değişikliklerini çok sık yapmak istemiyorsanız ve tutarlı istek süreleriyle ilgili güçlü gereksinimleriniz yoksa muhtemelen ayrı bir desteğe ihtiyacınız yoktur.
İlk yükleme süresinden başka, ana sınırlama faktörü bellektir. Şu anda sadece 1 işçi işlemim var, çünkü tüm modeller belleğe yüklendiğinde, tek bir işlem 1GB'a kadar çıkabilir (YMMV ve tek bir 11MB pikle dosyası için bellek gereksinimleriniz çok daha düşük olacaktır). Halihazırda yüklenmiş olan bir model ile bireysel bir talebi işlemek, hızlı bir şekilde (genellikle < 50ms), şu anda 1'den fazla çalışana ihtiyacım yok ve eğer yapsaydım, en basit çözüm daha fazla çalışan işlemi çalıştırmak için yeterli RAM eklemektir.
Bellek hakkında endişe ediyorsanız, eşdeğer modellerin NLTK'den önemli ölçüde daha az bellek kullanabildiğinden, scikit-öğrenmesine bakın. Ancak, mutlaka daha hızlı veya daha doğru değildirler.
İlk önce Python 2 kullanıyor musunuz? Eğer öyleyse, 'pickle' veya' cPickle' kullanıyor musunuz? CPickle'a (veya iki uygulamanın tek bir modülde birleştirildiği Python 3'e) birkaç saniye içinde birkaç düzine freze dönüştürebilirsiniz. Alternatif olarak, tüm isteklerde aynı tagger'ı kullanmanız gerekiyorsa, her istek için neden yüklersiniz? Bir kere yükleyin (veya işlem başına bir kere veya Piramit'i bilmiyorum) ve sonra ne kadar süreceği önemli değil. – abarnert
Yukarıdaki kanıtlar için şunu deneyin: 'p = cPickle.dumps (aralık (1250000)); print timeit.timeit (lambda: pickle.loads (s), sayı = 1); print timeit.timeit (lambda: cPickle.loads (s), sayı = 1) '. Sistemimde 4.96 vs 0.35s aldım. – abarnert
Python 2 ve normal turney kullanıyorum. CPickle'a bir bakacağım. Evet, dosyayı yüklemenin en iyi yolundan tamamen emin değildim. Pyramid – abroekhof