2016-01-25 13 views
8

Wykonałem eksperyment uczenia komputerowego Azure, który pobiera mały zestaw danych (tablica 12x3) i niektóre parametry oraz wykonuje niektóre obliczenia przy użyciu kilku modułów Pythona (obliczenia regresji liniowej i kilka innych). Wszystko działa dobrze.Żądanie uczenia się maszyny Azure opóźnienie odpowiedzi

Zainstalowałem eksperyment i chcę teraz przesyłać dane z poziomu aplikacji. Wywołanie API przychodzi i wraca z poprawnymi wynikami, ale obliczenie prostej regresji liniowej zajmuje do 30 sekund. Czasami jest to 20 sekund, czasami tylko 1 sekunda. Nawet jednorazowo osiągnąłem 100 ms (to jest to, co chciałbym), ale 90% czasu wykonania żądania zajmuje więcej niż 20 sekund, co jest niedopuszczalne.

Sądzę, że ma to coś wspólnego z eksperymentem, lub nadal znajduje się w gnieździe programisty, ale nie mogę znaleźć ustawień, aby uruchomić go na szybszym komputerze.

Czy istnieje sposób na przyspieszenie realizacji?

Edytuj: Aby wyjaśnić: Różne czasy są uzyskiwane z tymi samymi danymi testowymi, po prostu wysyłając to samo żądanie wiele razy. To sprawiło, że doszedłem do wniosku, że musi to mieć coś wspólnego z tym, że moja prośba jest umieszczona w kolejce, jest pewne opóźnienie startowe lub jestem dławiony w jakiś inny sposób.

Odpowiedz

8

Po pierwsze, zakładam, że robisz test czasowy na opublikowanym punkcie końcowym AML.

Podczas połączenia z AML pierwsze połączenie musi rozgrzać pojemnik. Domyślnie usługa sieciowa ma 20 kontenerów. Każdy pojemnik jest zimny, a zimny pojemnik może spowodować duże (30 sekund) opóźnienie. W ciągu zwracanym przez punkt końcowy AML, tylko żądania liczników, które mają flagę isWarm, ustawiono na true. Rozbijając usługę za pomocą WIELU żądań (w odniesieniu do liczby uruchomionych kontenerów) można ogrzać wszystkie pojemniki.

Jeśli wysyłasz dziesiątki żądań na instancję, punkt końcowy może być dławiony. Można dostosować liczbę połączeń Twój końcowy może przyjąć przechodząc do manage.windowsazure.com/

  1. manage.windowsazure.com/
  2. Azure ML odcinku od lewym pasku
  3. wybrać swoje roboczy
  4. przejdź do zakładki usług internetowych
  5. Wybierz usługę internetową z listy
  6. dostosować liczbę połączeń z suwakiem

Po włączeniu debugowania na punkcie końcowym można uzyskać dzienniki dotyczące czasu wykonania każdego z modułów do zakończenia. Możesz użyć tego do określenia, czy moduł nie działa zgodnie z twoim przeznaczeniem, co może dodać do czasu.

Ogólnie rzecz biorąc, podczas używania modułu Python Execute występuje obciążenie, ale spodziewam się, że żądanie to zakończy się w czasie poniżej 3 sekund.

+2

Twoja odpowiedź wraz z [tym artykułem] (http://jiffie.blogspot.be/2015/10/trying-to-figure-out-azure-ml.html) pozwoliła mi zrozumieć problem: domyślnie są przydzielone 20 pojemników, na początku wszystkie są zimne. Nie wykonywałem połączeń jednocześnie i sporo go aktualizowałem, więc częściej nie dzwoniłem do jednego z tych zimnych pojemników, co trwało około 30 sekund. Dopiero po uderzeniu w wszystkie pojemniki, gdy masz gwarancję szybkiego reagowania. Do testowania obniżyłem do 4 kontenerów, co oznacza, że ​​zaczynam od 4 powolnych połączeń, po których wszystkie pojemniki są ciepłe. – JrtPec

+0

Dzięki, przejrzę artykuł i dodam wszystko, co przegapiłem. –

+0

Te "chłodne" pojemniki są jednak niedogodnością. Przypuśćmy, że zaktualizuję usługę sieciową, pierwsze 20 żądań, które klienci wprowadzą, będzie bardzo wolne (w zależności od liczby jednoczesnych wywołań w ustawieniach będzie jeszcze gorzej). Czy istnieje sposób na poinformowanie wszystkich kontenerów, aby "rozgrzały się" po wdrożeniu? – JrtPec

Powiązane problemy