tutorial pricing machine learning espaƱol curso python azure cortana-intelligence azure-machine-learning
https://azuremlpackagesupport.blob.core.windows.net/python/azure.zip

python - pricing - cortana azure



Acceda al almacenamiento de blog de Azure desde un experimento de Azure ML (3)

Los experimentos Azure ML proporcionan formas de leer y escribir archivos CSV en el almacenamiento de blobs de Azure a través de los módulos Reader y Writer . Sin embargo, necesito escribir un archivo JSON para blob storage. Como no hay un módulo para hacerlo, intento hacerlo desde dentro de un módulo Execute Python Script .

# Import the necessary items from azure.storage.blob import BlobService def azureml_main(dataframe1 = None, dataframe2 = None): account_name = ''mystorageaccount'' account_key=''mykeyhere=='' json_string=''{jsonstring here}'' blob_service = BlobService(account_name, account_key) blob_service.put_block_blob_from_text("upload","out.json",json_string) # Return value must be of a sequence of pandas.DataFrame return dataframe1,

Sin embargo, esto da como resultado un error: ImportError: No module named azure.storage.blob

Esto implica que el paquete de Python de azure-storage no está instalado en Azure ML.

¿Cómo puedo escribir en Azure blob storage desde dentro de Azure ML Experiment?

Aquí está el mensaje de error de relleno:

Error 0085: The following error occurred during script evaluation, please view the output log for more information: ---------- Start of error message from Python interpreter ---------- data:text/plain,Caught exception while executing function: Traceback (most recent call last): File "C:/server/invokepy.py", line 162, in batch mod = import_module(moduleName) File "C:/pyhome/lib/importlib/__init__.py", line 37, in import_module __import__(name) File "C:/temp/azuremod.py", line 19, in <module> from azure.storage.blob import BlobService ImportError: No module named azure.storage.blob ---------- End of error message from Python interpreter ---------- Start time: UTC 02/06/2016 17:59:47 End time: UTC 02/06/2016 18:00:00`

¡Gracias a todos!

ACTUALIZACIÓN: Gracias a Dan y Peter por las ideas a continuación. Este es el progreso que he logrado al usar esas recomendaciones. Creé un entorno virtual limpio de Python 2.7 (en VS 2005) y pip install azure-storage una pip install azure-storage para obtener las dependencias en mi directorio site-packages. Luego comprimí la carpeta de paquetes de sitio y la cargué como archivo Zip, como se indica en la nota de Dan a continuación. Luego incluí la referencia al directorio de paquetes de sitio e importé con éxito los elementos requeridos. Esto produjo un error de tiempo de espera al escribir en el almacenamiento de blog.

Aquí está mi código:

# Get access to the uploaded Python packages import sys packages = "./Script Bundle/site-packages" sys.path.append(packages) # Import the necessary items from packages referenced above from azure.storage.blob import BlobService from azure.storage.queue import QueueService def azureml_main(dataframe1 = None, dataframe2 = None): account_name = ''mystorageaccount'' account_key=''p8kSy3F...elided...3plQ=='' blob_service = BlobService(account_name, account_key) blob_service.put_block_blob_from_text("upload","out.txt","Test to write") # All of the following also fail #blob_service.create_container(''images'') #blob_service.put_blob("upload","testme.txt","foo","BlockBlob") #queue_service = QueueService(account_name, account_key) #queue_service.create_queue(''taskqueue'') # Return value must be of a sequence of pandas.DataFrame return dataframe1,

Y aquí está el nuevo registro de errores:

Error 0085: The following error occurred during script evaluation, please view the output log for more information: ---------- Start of error message from Python interpreter ---------- data:text/plain,C:/pyhome/lib/site-packages/requests/packages/urllib3/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. InsecurePlatformWarning Caught exception while executing function: Traceback (most recent call last): File "C:/server/invokepy.py", line 169, in batch odfs = mod.azureml_main(*idfs) File "C:/temp/azuremod.py", line 44, in azureml_main blob_service.put_blob("upload","testme.txt","foo","BlockBlob") File "./Script Bundle/site-packages/azure/storage/blob/blobservice.py", line 883, in put_blob self._perform_request(request) File "./Script Bundle/site-packages/azure/storage/storageclient.py", line 171, in _perform_request resp = self._filter(request) File "./Script Bundle/site-packages/azure/storage/storageclient.py", line 160, in _perform_request_worker return self._httpclient.perform_request(request) File "./Script Bundle/site-packages/azure/storage/_http/httpclient.py", line 181, in perform_request self.send_request_body(connection, request.body) File "./Script Bundle/site-packages/azure/storage/_http/httpclient.py", line 143, in send_request_body connection.send(request_body) File "./Script Bundle/site-packages/azure/storage/_http/requestsclient.py", line 81, in send self.response = self.session.request(self.method, self.uri, data=request_body, headers=self.headers, timeout=self.timeout) File "C:/pyhome/lib/site-packages/requests/sessions.py", line 464, in request resp = self.send(prep, **send_kwargs) File "C:/pyhome/lib/site-packages/requests/sessions.py", line 576, in send r = adapter.send(request, **kwargs) File "C:/pyhome/lib/site-packages/requests/adapters.py", line 431, in send raise SSLError(e, request=request) SSLError: The write operation timed out ---------- End of error message from Python interpreter ---------- Start time: UTC 02/10/2016 15:33:00 End time: UTC 02/10/2016 15:34:18

Donde mi exploración actual está liderando es que hay una dependencia en las requests paquete Python en azure-storage . requests tiene un error conocido en Python 2.7 para llamar a nuevos protocolos SSL. No estoy seguro, pero estoy cavando en esa área ahora.

ACTUALIZACIÓN 2: Este código funciona perfectamente bien dentro de una portátil Python 3 Jupyter. Además, si hago que Blob Container se abra al acceso público, puedo LEER directamente desde el contenedor a través de una URL. Por ejemplo: df = pd.read_csv("https://mystorageaccount.blob.core.windows.net/upload/test.csv") carga fácilmente el archivo desde el almacenamiento de blob. Sin embargo, no puedo usar el azure.storage.blob.BlobService para leer desde el mismo archivo.

ACTUALIZACIÓN 3: Dan, en un comentario a continuación, sugirió que intenté con las libretas Jupyter alojadas en Azure ML . Lo había estado ejecutando desde un portátil Jupyter local (consulte la actualización 2 anterior). Sin embargo , falla cuando se ejecuta desde un Bloc de notas de Azure ML y los errores apuntan nuevamente al paquete de requires . Tendré que encontrar los problemas conocidos con ese paquete, pero desde mi lectura, el problema conocido es con urllib3 y solo afecta a Python 2.7 y NO a las versiones de Python 3.x. Y esto se ejecutó en una computadora portátil Python 3.x. Grrr.

ACTUALIZACIÓN 4: Como dice Dan a continuación, esto puede ser un problema con las redes de Azure ML, ya que Execute Python Script es relativamente nuevo y acaba de recibir soporte de red. Sin embargo, también probé esto en un webjob de Azure App Service, que se encuentra en una plataforma Azure completamente diferente. (También está en una distribución de Python completamente diferente y es compatible tanto con Python 2.7 como con 3.4 / 5, pero solo a 32 bits, incluso en máquinas de 64 bits). El código también falla, con un mensaje de InsecurePlatformWarning .

[02/08/2016 15:53:54 > b40783: SYS INFO] Run script ''ListenToQueue.py'' with script host - ''PythonScriptHost'' [02/08/2016 15:53:54 > b40783: SYS INFO] Status changed to Running [02/08/2016 15:54:09 > b40783: INFO] test.csv [02/08/2016 15:54:09 > b40783: ERR ] D:/home/site/wwwroot/env/Lib/site-packages/requests/packages/urllib3/util/ssl_.py:315: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning. [02/08/2016 15:54:09 > b40783: ERR ] SNIMissingWarning [02/08/2016 15:54:09 > b40783: ERR ] D:/home/site/wwwroot/env/Lib/site-packages/requests/packages/urllib3/util/ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. [02/08/2016 15:54:09 > b40783: ERR ] InsecurePlatformWarning [02/08/2016 15:54:09 > b40783: ERR ] D:/home/site/wwwroot/env/Lib/site-packages/requests/packages/urllib3/util/ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. [02/08/2016 15:54:09 > b40783: ERR ] InsecurePlatformWarning


Vas por el camino correcto. El módulo Execution Python Script está diseñado para necesidades personalizadas como esta. Su verdadero problema es cómo importar los módulos de script de Python existentes. Las instrucciones completas se pueden encontrar aquí, pero resumiré para SO.

Deberá tomar el SDK de Azure Python y comprimirlo, cargarlo e importarlo en su módulo. Puedo ver por qué esto no está allí por defecto ...

https://azure.microsoft.com/en-us/documentation/articles/machine-learning-execute-python-scripts/

Importación de módulos de script de Python existentes

Un caso de uso común para muchos científicos de datos es incorporar scripts de Python existentes en los experimentos de aprendizaje automático de Azure. En lugar de concatenar y pegar todo el código en un solo cuadro de secuencia de comandos, el módulo Ejecutar secuencia de comandos de Python acepta un tercer puerto de entrada al que se puede conectar un archivo zip que contiene los módulos de Python. El marco de ejecución descomprime el archivo en tiempo de ejecución y los contenidos se agregan a la ruta de la biblioteca del intérprete de Python. La función de punto de entrada azureml_main puede importar estos módulos directamente.

Como ejemplo, considere el archivo Hello.py que contiene una función simple "Hello, World".

Figura 4. Función definida por el usuario.

A continuación, podemos crear un archivo Hello.zip que contenga Hello.py:

Figura 5. Archivo zip que contiene el código de Python definido por el usuario.

Luego, cárguelo como un conjunto de datos en Azure Machine Learning Studio. Si luego creamos y ejecutamos un experimento simple, a utiliza el módulo:

Figura 6. Ejemplo de experimento con código Python definido por el usuario y cargado como un archivo zip.

El resultado del módulo muestra que el archivo zip se ha desempaquetado y que se ha ejecutado la función print_hello. Figura 7. Función definida por el usuario en uso dentro del módulo Ejecutar Python Script.


Como sé, puede usar otros paquetes a través de un archivo comprimido que proporcione a la tercera entrada. Los comentarios en la secuencia de comandos de la plantilla de Python en Azure ML dicen:

Si un archivo zip está conectado al tercer puerto de entrada conectado, se descomprime en ". / Script Bundle". Este directorio se agrega a sys.path. Por lo tanto, si su archivo zip contiene un archivo Python mymodule.py, puede importarlo usando: import mymodule

De modo que puede empaquetar azure-storage-python como un archivo zip haciendo clic en Nuevo , hacer clic en Dataset , y luego seleccionar Desde archivo local y la opción de archivo Zip para cargar un archivo ZIP en su área de trabajo.

Como referencia, puede ver más información en la sección How to Use Execute Python Script del documento Execute Python Script .


Línea inferior al frente: Use HTTP en lugar de HTTPS para acceder al almacenamiento de Azure.

Al declarar que BlobService pasa el protocol=''http'' para obligar al servicio a comunicarse a través de HTTP. Tenga en cuenta que debe tener su contenedor configurado para permitir solicitudes a través de HTTP (que lo hace de forma predeterminada).

client = BlobService(STORAGE_ACCOUNT, STORAGE_KEY, protocol="http")

Historia y crédito:

Envié una consulta sobre este tema a @AzureHelps y abrieron un ticket en los foros de MSDN: https://social.msdn.microsoft.com/Forums/azure/en-US/46166b22-47ae-4808-ab87-402388dd7a5c/ trouble-writing-blob-storage-file-in-azure-ml-experiment? forum = MachineLearning & prof = required

Sudarshan Raghunathan respondió con la magia. Estos son los pasos para facilitarles a todos duplicar mi solución:

  1. Descargue azure.zip, que proporciona las bibliotecas necesarias: https://azuremlpackagesupport.blob.core.windows.net/python/azure.zip
  2. Subirlos como un DataSet al Azure ML Studio
  3. Conéctelos a la entrada Zip en un módulo Execute Python Script
  4. Escriba su secuencia de comandos como lo haría normalmente, asegurándose de crear su objeto BlobService con protocol=''http''
  5. Ejecute el experimento: ahora debería poder escribir en el almacenamiento de blobs.

Algunos ejemplos de código se pueden encontrar aquí: https://gist.github.com/drdarshan/92fff2a12ad9946892df

El código que utilicé fue el siguiente, que no primero escribe el archivo CSV en el sistema de archivos, sino que lo envía como una secuencia de texto.

from azure.storage.blob import BlobService def azureml_main(dataframe1 = None, dataframe2 = None): account_name = ''mystorageaccount'' account_key=''p8kSy3FACx...redacted...ebz3plQ=='' container_name = "upload" json_output_file_name = ''testfromml.json'' json_orient = ''records'' # Can be index, records, split, columns, values json_force_ascii=False; blob_service = BlobService(account_name, account_key, protocol=''http'') blob_service.put_block_blob_from_text(container_name,json_output_file_name,dataframe1.to_json(orient=json_orient, force_ascii=json_force_ascii)) # Return value must be of a sequence of pandas.DataFrame return dataframe1,

Algunos pensamientos:

  1. Preferiría que las bibliotecas de Python azure se importen de forma predeterminada. Microsoft importa cientos de bibliotecas de terceros en Azure ML como parte de la distribución de Anaconda. También deben incluir los necesarios para trabajar con Azure. Estamos en Azure, nos hemos comprometido con Azure. Abrázalo.
  2. No me gusta que tenga que usar HTTP, en lugar de HTTPS. De acuerdo, esta es la comunicación interna de Azure, por lo que probablemente no sea gran cosa. Sin embargo, la mayoría de la documentación sugiere el uso de SSL / HTTPS cuando se trabaja con almacenamiento de blob, por lo que preferiría poder hacer eso.
  3. Todavía obtengo errores de tiempo de espera al azar en el experimento. A veces, el código de Python se ejecutará en milisegundos, otras veces se ejecutará durante varios 60 o segundos y luego se agotarán. Esto hace que correrlo en un experimento sea muy frustrante a veces. Sin embargo, cuando se publica como un servicio web, no parece tener este problema.
  4. Preferiría que la experiencia de mi código local coincida más estrechamente con Azure ML. Localmente, puedo usar HTTPS y nunca agotar el tiempo de espera. Es increíblemente rápido y fácil de escribir. Pero pasar a un experimento de Azure ML significa una depuración casi todas las veces.

Grandes apoyos para Dan, Peter y Sudarshan, todos de Microsoft, por su ayuda para resolver esto. ¡Lo aprecio mucho!