0

Я пытаюсь опубликовать модель машинного обучения на веб-сервисе Azure с использованием python. Я могу развернуть код успешно, но когда я пытаюсь вызвать его по URL-адресу, он бросает мне модуль «Azure», которого нет. Код в основном извлекает модель TFIDF из контейнера (blob) и использует его для прогнозирования нового значения. Ошибка ясно говорит, что пакет Azure отсутствует при попытке запустить в webservice, и я не уверен, как его исправить. Здесь идет код:Azure module on webservice

Для развертывания:

from azureml import services 
from azure.storage.blob import BlobService 
@services.publish('7c94eb2d9e4c01cbe7ce1063','f78QWNcOXHt9J+Qt1GMzgdEt+m3NXby9JL`npT7XX8ZAGdRZIX/NZ4lL2CkRkGQ==') 
@services.types(res=unicode) 
@services.returns(str) 
def TechBot(res): 
    from azure.storage.blob import BlobService 
    from gensim.similarities import SparseMatrixSimilarity, MatrixSimilarity, Similarity 
    blob_service = BlobService(account_name='tfidf', account_key='RU4R/NIVPsPOoR0bgiJMtosHJMbK1+AVHG0sJCHT6jIdKPRz3cIMYTsrQ5BBD5SELKHUXgBHNmvsIlhEdqUCzw==') 
    blob_service.get_blob_to_path('techbot',"2014.csv","df") 
    df=pd.read_csv("df") 
    doct = res 

Чтобы получить доступ к URL я использовал код питона из

service.azureml.net

import urllib2 
import json 
import requests 
data = { 
     "Inputs": { 
       "input1": 
       [ 
        { 
          'res': "wifi wnable", 
        } 
       ], 
     }, 
    "GlobalParameters": { 
    } 
} 

body = str.encode(json.dumps(data)) 

#proxies = {"http":"http://%s" % proxy} 
url = 'http://ussouthcentral.services.azureml.net/workspaces/7c94eb2de26a45399e4c01cbe7ce1063/services/11943e537e0741beb466cd91f738d073/execute?api-version=2.0&format=swagger' 
api_key = '8fH9kp67pEt3C6XK9sXDLbyYl5cBNEwYg9VY92xvkxNd+cd2w46sF1ckC3jqrL/m8joV7o3rsTRUydkzRGDYig==' # Replace this with the API key for the web service 
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)} 

#proxy_support = urllib2.ProxyHandler(proxies) 
#opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1)) 
#urllib2.install_opener(opener) 

req = urllib2.Request(url, body, headers) 

try: 
    response = urllib2.urlopen(req, timeout=60) 

    result = response.read() 
    print(result) 
except urllib2.HTTPError, error: 
    print("The request failed with status code: " + str(error.code)) 

    # Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure 
    print(error.info()) 
    print(json.loads(error.read())) 

строка «Рез» будет предсказано в конце , Как я уже сказал, он работает отлично, если я запускаю, как в python, вызвав azure module, проблема возникает, когда я обращаюсь к url. Любая помощь приветствуется, пожалуйста, дайте мне знать, если вам нужна дополнительная информация (я только обработал половину моего кода)

ответ

1

Я попытался воспроизвести проблему через POSTMAN, после чего я получил информацию об ошибке ниже, как вы сказали.

{ 
    "error": { 
    "code": "ModuleExecutionError", 
    "message": "Module execution encountered an error.", 
    "details": [ 
     { 
     "code": "85", 
     "target": "Execute Python Script RRS", 
     "message": "Error 0085: The following error occurred during script evaluation, please view the output log for more information:\r\n---------- Start of error message from Python interpreter ----------\r\nCaught exception while executing function: Traceback (most recent call last):\n File \"\\server\\InvokePy.py\", line 120, in executeScript\n outframe = mod.azureml_main(*inframes)\n File \"\\temp\\1280677032.py\", line 1094, in azureml_main\n File \"<ipython-input-15-bd03d199b8d9>\", line 6, in TechBot_2\nImportError: No module named azure\n\r\n\r\n---------- End of error message from Python interpreter ----------" 
     } 
    ] 
    } 
} 

В соответствии с кодом ошибки 00085 & информации, ImportError: No module named azure, я думаю, что проблема была вызвана импортом модуль питона azure-storage. Был аналогичный поток SO Access Azure blog storage from within an Azure ML experiment, который получил ту же проблему, я думаю, вы можете обратиться к его ответу. Попробуйте использовать протокол HTTP вместо HTTPS в вашем коде для решения проблемы как код client = BlobService(STORAGE_ACCOUNT, STORAGE_KEY, protocol="http").

Надеюсь, это поможет. Любые проблемы & обновление, пожалуйста, сообщите мне.


Update: Использование HTTP протокола для BlobService

from azureml import services 
from azure.storage.blob import BlobService 
@services.publish('7c94eb2d9e4c01cbe7ce1063','f78QWNcOXHt9J+Qt1GMzgdEt+m3NXby9JL`npT7XX8ZAGdRZIX/NZ4lL2CkRkGQ==') 
@services.types(res=unicode) 
@services.returns(str) 
def TechBot(res): 
    from azure.storage.blob import BlobService 
    from gensim.similarities import SparseMatrixSimilarity, MatrixSimilarity, Similarity 
# Begin: Update code 
# Using `HTTP` protocol for BlobService 
    blob_service = BlobService(account_name='tfidf', 
       account_key='RU4R/NIVPsPOoR0bgiJMtosHJMbK1+AVHG0sJCHT6jIdKPRz3cIMYTsrQ5BBD5SELKHUXgBHNmvsIlhEdqUCzw==', 
       protocol='http') 
# End 
    blob_service.get_blob_to_path('techbot',"2014.csv","df") 
    df=pd.read_csv("df") 
    doct = res 
+0

Я обновил протокол blobservice и используется HTTP в URL, теперь И получать «URLError:

+0

Обновлен сценарий, чтобы отразить переменную Http и timeout –

+0

@SincoleBrans You неправильно понял мое значение. Я предложил вам попробовать получить доступ к хранилищу Azure Blob в SDK с использованием протокола HTTP, а не использовать 'http: //' вместо 'https: //' в URL-адресе веб-сервиса azureml. Посмотрите мой код обновления для развертывания azureml. –