日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Python SDK使用說明

推薦使用EAS提供的官方SDK進行服務調用,從而有效減少編寫調用邏輯的時間并提高調用穩定性。本文介紹官方Python SDK接口詳情,并以常見類型的輸入輸出為例,提供了使用Python SDK進行服務調用的完整程序示例。

安裝方法

pip install -U eas-prediction --user

接口列表

接口

描述

PredictClient

PredictClient(endpoint, service_name, custom_url)

  • 功能:PredictClient類的構造方法。

  • 參數:

    • endpoint:服務端的Endpoint地址。

      如果是普通服務,則設置為默認網關Endpoint。例如182848887922***.cn-shanghai.pai-eas.aliyuncs.com。

      如果是VPC直連請求,則設置為當前地域的通用Endpoint。例如,華東2(上海)設置為pai-eas-vpc.cn-shanghai.aliyuncs.com

    • service_name:服務名稱。

    • custom_url:服務URL。非必需,僅對于Endpoint是非<uid>.<region>.pai-eas.aliyuncs.com格式的服務(例如WebUI服務),可以通過設置該參數來創建客戶端,例如client = PredictClient(custom_url='<url>')

set_endpoint(endpoint)

  • 功能:設置服務的Endpoint地址。

  • 參數:endpoint表示服務端的Endpoint地址。

    如果是普通服務,則設置為默認網關Endpoint。例如182848887922***.cn-shanghai.pai-eas.aliyuncs.com。

    如果是VPC直連請求,則設置為當前地域的通用Endpoint。例如,華東2(上海)設置為pai-eas-vpc.cn-shanghai.aliyuncs.com

set_service_name(service_name)

  • 功能:設置請求的服務名字。

  • 參數:service_name請求的服務名字。

set_endpoint_type(endpoint_type)

  • 功能:設置服務端的網關類型。

  • 參數:endpoint_type待設置的網關類型,支持以下網關類型:

    • ENDPOINT_TYPE_GATEWAY:默認網關。

    • ENDPOINT_TYPE_DIRECT:表示直連請求。如果沒有手動設置該參數,則默認通過網關訪問服務。

set_token(token)

  • 功能:設置服務訪問的Token。

  • 參數:token表示服務訪問的Token。

set_retry_count(max_retry_count)

  • 功能:設置請求失敗的重試次數。

  • 參數:max_retry_count表示請求失敗的重試次數,默認為5。

    重要

    對于服務端進程異常、服務器異?;蚓W關長連接斷開等情況導致的個別請求失敗,均需要客戶端重新發送請求。因此,請勿將該參數設置為0。

set_max_connection_count(max_connection_count)

  • 功能:設置客戶端連接池中長連接數量的最大值。出于性能考慮,客戶端會與服務端建立長連接,并將連接放入連接池中。每次請求時,從連接池中獲取一個空閑連接訪問服務。

  • 參數:max_connection_count表示連接池中最大的長連接數量,默認值為100。

set_timeout(timeout)

  • 功能:設置請求的超時時間。

  • 參數:timeout表示請求的超時時間。單位為毫秒,默認值為5000。

init()

PredictClient對象進行初始化。在上述設置參數的接口執行完成后,需要調用init()接口才能生效。

predict(request)

  • 功能:向在線預測服務提交一個預測請求。

  • 參數:request是一個抽象類,可以輸入不同類型的request,例如StringRequestTFRequest。

  • 返回值:返回請求對應的Response。

StringRequest

StringRequest(request_data)

  • 功能:StringRequest類的構造方法。

  • 參數:request_data表示待發送的請求字符串。

StringResponse

to_string()

  • 功能:將StringResponse類轉換為字符串。

  • 返回值:返回請求的Response Body。

TFRequest

TFRequest(signature_name)

  • 功能:TFRequest類構造方法。

  • 參數:signature_name表示待請求模型中的Signature Name。

add_feed(self, input_name, shape, data_type, content)

  • 功能:請求TensorFlow在線預測服務模型時,設置需要輸入的input數據。

  • 參數:

    • input_name:輸入Tensor的別名。

    • shape:輸入TensorTensorShape。

    • data_type:輸入TensorDataType,支持以下類型:

      • TFRequest.DT_FLOAT

      • TFRequest.DT_DOUBLE

      • TFRequest.DT_INT8

      • TFRequest.DT_INT16

      • TFRequest.DT_INT32

      • TFRequest.DT_INT64

      • TFRequest.DT_STRING

      • TFRequest.TF_BOOL

    • content:輸入Tensor的內容,通過一維數組展開表示。

add_fetch(self, output_name)

  • 功能: 請求TensorFlow在線預測服務模型時,設置需要輸出的Tensor別名。

  • 參數:output_name表示待輸出Tensor的別名。

    對于SavedModel模型,該參數是可選的。如果沒有設置該參數,則輸出所有的outputs。

    對于Frozen Model,該參數必選。

to_string()

  • 功能:將TFRequest構建的用于請求傳輸的ProtoBuf對象序列化成字符串。

  • 返回值:TFRequest序列化后的字符串。

TFResponse

get_tensor_shape(output_name)

  • 功能:獲得指定別名的輸出TensorTensorShape。

  • 參數:output_name表示待獲取ShapeTensor別名。

  • 返回值:輸出的TensorShape。

get_values(output_name)

  • 功能:獲取輸出Tensor的數據向量。

  • 參數:output_name表示待獲取結果數據的Tensor別名。

  • 返回值:輸出結果以一維數組的形式保存。您可以搭配get_tensor_shape()接口,獲取對應TensorShape,將其還原成所需的多維Tensor。接口會根據output的類型,返回不同類型的結果數組。

TorchRequest

TorchRequest()

TorchRequest類的構造方法。

add_feed(self, index, shape, data_type, content)

  • 功能:請求PyTorch在線預測服務模型時,設置需要輸入的Tensor。

  • 參數:

    • index:待輸入Tensor的下標。

    • shape:輸入TensorTensorShape。

    • data_type表示輸入TensorDataType,支持以下類型:

      • TFRequest.DT_FLOAT

      • TFRequest.DT_DOUBLE

      • TFRequest.DT_INT8

      • TFRequest.DT_INT16

      • TFRequest.DT_INT32

      • TFRequest.DT_INT64

      • TFRequest.DT_STRING

      • TFRequest.TF_BOOL

    • content:輸入Tensor的內容,通過一維數組展開表示。

add_fetch(self, output_index)

  • 功能:請求PyTorch在線預測服務模型時,設置需要輸出TensorIndex。該接口為可選,如果您沒有調用該接口設置輸出TensorIndex,則輸出所有的outputs

  • 參數:output_index表示輸出TensorIndex。

to_string()

  • 功能:將TorchRequest構建的用于請求傳輸的ProtoBuf對象序列化成字符串。

  • 返回值:TorchRequest序列化后的字符串。

TorchResponse

get_tensor_shape(output_index)

  • 功能:獲得指定下標的輸出TensorTensorShape。

  • 參數:待獲取Shape的輸出TensorIndex。

  • 返回值:下標Index對應的輸出TensorShape。

get_values(output_index)

  • 功能:獲取輸出Tensor的數據向量,輸出結果以一維數組的形式保存。您可以搭配使用get_tensor_shape()接口,獲取對應TensorShape,將其還原成所需的多維Tensor。接口會根據output的類型,返回不同類型的結果數組。

  • 參數:output_index表示待獲取的輸出 Tensor對應的下標。

  • 返回值:返回的結果Tensor的數據數組。

QueueClient

QueueClient(endpoint, queue_name)

  • 功能:創建一個QueueClient對象。

  • 參數:

    • endpoint:表示服務端的Endpoint地址。

    • queueName:表示隊列服務名稱。

  • 返回值:創建的QueueClient對象。

set_token(token)

  • 功能:為QueueClient對象設置的用于訪問隊列服務鑒權的Token。

  • 參數:token表示隊列服務的Token。

init(uid=None,gid='eas')

  • 功能:初始化一個QueueClient對象。

  • 參數:

    • uid:表示向服務端注冊的客戶端的User ID,每個客戶端實例的uid不能重復,同一個uid只能允許注冊一次,服務端推送數據時會在不同的uid之間均勻地分發。

    • gid:表示向服務端注冊的客戶端的group id,默認都屬于同一個group中,若存在不同的group,同一條數據會向所有的group中均推送一份。

set_logger(logger=None)

  • 功能:為QueueClient設置一個logger對象,默認會將運行中的Warning信息打印至標準輸出中,若要關閉該信息可將logger對象設置為None。

  • 參數:logger:表示要設置的logging對象。

truncate(index)

  • 功能:從指定index向前截斷隊列中的數據,只保留指定index之后的數據。

  • 參數:index:表示要截斷的隊列中數據的index。

put(data,tags:dict={})

  • 功能:向隊列中寫入一條數據。

  • 參數:

    • data:表示要向隊列中寫入的數據內容。

    • tags(可選):表示要向隊列中寫入的數據的tags。

  • 返回值:

    • index:表示當前寫入的數據在隊列中的index值,可用于從隊列中查詢數據。

    • requestId:表示當前寫入數據在隊列中自動生成的requestId,requestId是一個特殊的tag,也可用于在隊列中查詢數據。

get(request_id=None, index=0, length=1, timeout='5s', auto_delete=True, tags={})

  • 功能:根據指定條件從隊列中查詢數據。

  • 參數:

    • request_id:表示要查詢的數據的request id。如果指定該參數,則數據查詢時從index開始查詢length個數據,如果查詢到存在指定request id的數據則返回,否則返回空。

    • index:表示要查詢的數據的起始index。默認為0,表示從隊列中的第一條數據開始查詢。

    • length:表示要查詢的數據的條數,返回從index開始計算(包含index)的最大length條數據。

    • timeout:表示查詢的等待時間。在等待時間內,如果隊列中有length條數據則直接返回,否則等到最大timeout等待時間則停止。

    • auto_delete:表示是否自動從隊列中刪除已經查詢的數據。如果配置為False,則數據可被重復查詢,您可以通過調用Del()方法手動刪除數據。

    • tags:表示查詢包含指定tags的數據,類型為DICT。從指定index開始遍歷length條數據,返回包含指定tags的數據。

  • 返回值:表示隊列中查詢出的以DataFrame封裝的數據結果。

attributes()

  • 功能:獲取隊列的屬性信息,包含隊列總長度、當前的數據長度等信息。

  • 返回值:attrs:隊列的屬性信息,類型為DICT。

delete(indexes)

  • 功能:從隊列中刪除指定index的數據。

  • 參數:indexes:表示要從隊列中刪除的數據的index值列表,支持單個String類型的index,也支持List類型的多個index列表。

search(index)

  • 功能:查詢數據的排隊信息。

  • 參數:index表示查詢數據的index。

  • 返回值:為JSONObject類型的數據排隊信息,包含如下字段:

    • ConsumerId:表示處理該數據的實例ID。

    • IsPending:表示數據是否正在被處理。

      • True表示正在被處理。

      • False表示正在排隊。

    • WaitCount:表示前面還需排隊等待的數據個數,僅IsPendingFalse時該值才有效,IsPendingTrue時該值為0。

    返回內容示例:

    • 返回{'ConsumerId': 'eas.****', 'IsPending': False, 'WaitCount':2},表示請求正在排隊。

    • 回顯日志search error:Code 404, Message: b'no data in stream',返回{}。表示未在隊列中找到該數據,該情況可能是因為數據已被服務端成功處理并返回結果,或是index參數配置有誤,請檢查確認。

watch(index, window, index_only=False, auto_commit=False)

  • 功能:訂閱隊列中的數據,隊列服務會根據條件向客戶端推送數據。

  • 參數:

    • index:表示訂閱的起始數據index。

    • window:表示訂閱的窗口大小,隊列服務一次最多向單個客戶端實例推送的數據量。

      說明

      如果推送的數據沒有被commit,則服務端不會再推送新數據;如果commit N條數據,則服務隊列會向客戶端推送N條數據,確??蛻舳嗽谕粫r刻處理的數據不會超過設置的窗口大小,來實現客戶端限制并發的功能。

    • index_only:表示是否只推送index值。

    • auto_commit:表示是否在推送完一條數據后,自動commit數據。建議配置為False。在收到推送數據并計算完成后手動Commit,在未完成計算的情況下實例發生異常,則實例上未commit的數據會由隊列服務分發給其他實例繼續處理。

  • 返回值:返回一個watcher對象,可通過該對象讀取推送的數據。

commit(index)

  • 功能:commit指定index的數據。

    說明

    commit表示服務隊列推送的數據已經處理完成,可以將該數據從隊列中清除,且不需要再推送給其他實例。

  • 參數:index: 表示要向隊列中commit的數據的index值列表,支持單個String類型的index,也支持List類型的多個index的列表。

Watcher

run()

  • 功能:運行一個Watcher,與服務端建立WebSocket連接接收數據推送,并將結果實時返回給調用端。

  • 返回值:表示從隊列服務中實時推送到客戶端的DataFrame對象。

close()

功能:關閉一個Watcher對象,用于關閉后端的數據連接。

說明

一個客戶端只能啟動一個Watcher對象,使用完成后需要將該對象關閉才能啟動新的Watcher對象。

程序示例

  • 字符串輸入輸出示例

    對于使用自定義Processor部署服務的用戶而言,通常采用字符串進行服務調用(例如,PMML模型服務的調用),具體的Demo程序如下。

    #!/usr/bin/env python
    
    from eas_prediction import PredictClient
    from eas_prediction import StringRequest
    
    if __name__ == '__main__':
        client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'scorecard_pmml_example')
        client.set_token('YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****')
        client.init()
    
        request = StringRequest('[{"fea1": 1, "fea2": 2}]')
        for x in range(0, 1000000):
            resp = client.predict(request)
            print(resp)
  • TensorFlow輸入輸出示例

    使用TensorFlow的用戶,需要將TFRequestTFResponse分別作為輸入和輸出數據格式,具體Demo示例如下。

    #!/usr/bin/env python
    
    from eas_prediction import PredictClient
    from eas_prediction import StringRequest
    from eas_prediction import TFRequest
    
    if __name__ == '__main__':
        client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'mnist_saved_model_example')
        client.set_token('YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****')
        client.init()
    
        #request = StringRequest('[{}]')
        req = TFRequest('predict_images')
        req.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
        for x in range(0, 1000000):
            resp = client.predict(req)
            print(resp)
  • 通過VPC網絡直連方式調用服務的示例

    通過網絡直連方式,您只能訪問部署在EAS專屬資源組的服務,且需要為該資源組與用戶指定的vSwitch連通網絡后才能使用。關于如何購買EAS專屬資源組和連通網絡,請參見使用專屬資源組配置網絡連通。該調用方式與普通調用方式相比,僅需增加一行代碼client.set_endpoint_type(ENDPOINT_TYPE_DIRECT)即可,特別適合大流量高并發的服務,具體示例如下。

    #!/usr/bin/env python
    
    from eas_prediction import PredictClient
    from eas_prediction import StringRequest
    from eas_prediction import TFRequest
    from eas_prediction import ENDPOINT_TYPE_DIRECT
    
    if __name__ == '__main__':
        client = PredictClient('http://pai-eas-vpc.cn-hangzhou.aliyuncs.com', 'mnist_saved_model_example')
        client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****')
        client.set_endpoint_type(ENDPOINT_TYPE_DIRECT)
        client.init()
    
        request = TFRequest('predict_images')
        request.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
        for x in range(0, 1000000):
            resp = client.predict(request)
            print(resp)
  • PyTorch輸入輸出示例

    使用PyTorch的用戶,需要將TorchRequestTorchResponse分別作為輸入和輸出數據格式,具體Demo示例如下。

    #!/usr/bin/env python
    
    from eas_prediction import PredictClient
    from eas_prediction import TorchRequest
    
    if __name__ == '__main__':
        client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'pytorch_gpu_wl')
        client.init()
    
        req = TorchRequest()
        req.add_feed(0, [1, 3, 224, 224], TorchRequest.DT_FLOAT, [1] * 150528)
        # req.add_fetch(0)
        import time
        st = time.time()
        timer = 0
        for x in range(0, 10):
            resp = client.predict(req)
            timer += (time.time() - st)
            st = time.time()
            print(resp.get_tensor_shape(0))
            # print(resp)
        print("average response time: %s s" % (timer / 10) )
  • BladeProcessor輸入輸出示例

    使用BladeProcessor的用戶,需要將BladeRequestBladeResponse分別作為輸入和輸出數據格式,具體Demo示例如下。

    #!/usr/bin/env python
    
    from eas_prediction import PredictClient
    from eas_prediction import BladeRequest 
    
    if __name__ == '__main__':
        client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'nlp_model_example')
        client.init()
    
        req = BladeRequest()
    
        req.add_feed('input_data', 1, [1, 360, 128], BladeRequest.DT_FLOAT, [0.8] * 85680)
        req.add_feed('input_length', 1, [1], BladeRequest.DT_INT32, [187])
        req.add_feed('start_token', 1, [1], BladeRequest.DT_INT32, [104])
        req.add_fetch('output', BladeRequest.DT_FLOAT)
        import time
        st = time.time()
        timer = 0
        for x in range(0, 10):
            resp = client.predict(req)
            timer += (time.time() - st)
            st = time.time()
            # print(resp)
            # print(resp.get_values('output'))
            print(resp.get_tensor_shape('output'))
        print("average response time: %s s" % (timer / 10) )
  • 兼容EAS默認TensorFlow接口的BladeProcessor輸入輸出示例

    BladeProcessor用戶可以使用兼容EAS默認TensorFlow接口的TFRequestTFResponse作為數據的輸入輸出格式,具體Demo示例如下。

    #!/usr/bin/env python
    
    from eas_prediction import PredictClient
    from eas_prediction.blade_tf_request import TFRequest # Need Importing blade TFRequest 
    
    if __name__ == '__main__':
        client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'nlp_model_example')
        client.init()
    
        req = TFRequest(signature_name='predict_words')
    
        req.add_feed('input_data', [1, 360, 128], TFRequest.DT_FLOAT, [0.8] * 85680)
        req.add_feed('input_length', [1], TFRequest.DT_INT32, [187])
        req.add_feed('start_token', [1], TFRequest.DT_INT32, [104])
        req.add_fetch('output')
        import time
        st = time.time()
        timer = 0
        for x in range(0, 10):
            resp = client.predict(req)
            timer += (time.time() - st)
            st = time.time()
            # print(resp)
            # print(resp.get_values('output'))
            print(resp.get_tensor_shape('output'))
        print("average response time: %s s" % (timer / 10) )
  • 隊列服務發送、訂閱數據示例

    通過QueueClient可向隊列服務中發送數據、查詢數據、查詢隊列服務的狀態以及訂閱隊列服務中的數據推送。以下方的Demo為例,介紹一個線程向隊列服務中推送數據,另外一個線程通過Watcher訂閱隊列服務中推送過來的數據。

    #!/usr/bin/env python
    
    from eas_prediction import QueueClient
    import threading
    
    if __name__ == '__main__':
        endpoint = '182848887922****.cn-shanghai.pai-eas.aliyuncs.com'
        queue_name = 'test_group.qservice/sink'
        token = 'YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MTUx****'
    
        queue = QueueClient(endpoint, queue_name)
        queue.set_token(token)
        queue.init()
        queue.set_timeout(30000)
    
        # truncate all messages in the queue
        attributes = queue.attributes()
        if 'stream.lastEntry' in attributes:
            queue.truncate(int(attributes['stream.lastEntry']) + 1)
    
        count = 100
        # create a thread to send messages to the queue
        def send_thread():
            for i in range(count):
                index, request_id = queue.put('[{}]')
                print('send: ', i, index, request_id)
    
        # create a thread to watch messages from the queue
        def watch_thread():
            watcher = queue.watch(0, 5, auto_commit=True)
            i = 0
            for x in watcher.run():
                print('recv: ', i, x.index, x.tags['requestId'])
                i += 1
                if i == count:
                    break
            watcher.close()
    
        thread1 = threading.Thread(target=watch_thread)
        thread2 = threading.Thread(target=send_thread)
    
        thread1.start()
        thread2.start()
    
        thread1.join()
        thread2.join()