As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Capturar dados do endpoint em tempo real
nota
Para evitar o impacto nas solicitações de inferência, a Captura de dados interrompe a captura de solicitações em altos níveis de uso do disco. É recomendável que você mantenha a utilização do disco abaixo de 75% para garantir que a captura de dados continue capturando as solicitações.
Para capturar dados para seu endpoint em tempo real, você deve implantar um modelo usando serviços de hospedagem de SageMaker IA. Isso exige que você crie um modelo de SageMaker IA, defina uma configuração de endpoint e crie um endpoint HTTPS.
As etapas necessárias para ativar a captura de dados são semelhantes, independentemente de você usar o SDK do Python AWS SDK for Python (Boto) ou do SageMaker Python. Se você usa o AWS SDK, defina o DataCaptureConfigdicionário, junto com os campos obrigatórios, dentro do CreateEndpointConfigmétodo para ativar a captura de dados. Se você usa o SDK do SageMaker Python, importe a DataCaptureConfigDataCaptureConfig
no método sagemaker.model.Model.deploy()
.
Para usar os trechos de código de processo, substitua o código italicized
placeholder text
no exemplo por suas próprias informações.
Como habilitar a captura de dados
Especifique uma configuração de captura de dados. É possível capturar a carga útil da solicitação, a carga útil da resposta ou ambas com essa configuração. O trecho de código em andamento demonstra como habilitar a captura de dados usando o SDK AI Python e AWS SDK for Python (Boto) o AI SageMaker Python.
nota
Você não precisa usar o Model Monitor para capturar cargas úteis da solicitação ou da resposta.
Implantar o modelo
Implante seu modelo e crie um endpoint HTTPS com DataCapture
ativado.
Visualizar os dados capturados
Crie um objeto preditor a partir da classe SageMaker Python SDKPredictor
para invocar seu endpoint em uma etapa futura. Forneça o nome do seu endpoint (definido anteriormente como endpoint_name
), junto com os objetos serializadores e desserializadores para o serializador e o desserializador, respectivamente. Para obter informações sobre os tipos de serializadores, consulte a classe Serializers
from sagemaker.predictor import Predictor from sagemaker.serializers import
<Serializer>
from sagemaker.deserializers import<Deserializers>
predictor = Predictor(endpoint_name=endpoint_name, serializer =<Serializer_Class>
, deserializer =<Deserializer_Class>
) # Example #from sagemaker.predictor import Predictor #from sagemaker.serializers import CSVSerializer #from sagemaker.deserializers import JSONDeserializer #predictor = Predictor(endpoint_name=endpoint_name, # serializer=CSVSerializer(), # deserializer=JSONDeserializer())
No cenário de exemplo de código em andamento, invocamos o endpoint com exemplos de dados de validação que armazenamos localmente em um arquivo CSV chamado validation_with_predictions
. Nosso conjunto de validação de amostras contém rótulos para cada entrada.
As primeiras linhas da instrução With abrem primeiro o arquivo CSV do conjunto de validação, depois dividem cada linha dentro do arquivo pelo caractere de vírgula ","
e, em seguida, armazenam os dois objetos retornados em um rótulo e variáveis input_cols. Para cada linha, a entrada (input_cols
) é passada para o método Predictor.predict()
integrado dos objetos da variável preditora (predictor
).
Suponha que o modelo retorne uma probabilidade. As probabilidades variam entre valores inteiros de 0 e 1.0. Se a probabilidade retornada pelo modelo for maior que 80% (0,8), atribuímos à predição um rótulo de valor inteiro de 1. Caso contrário, atribuímos à predição um rótulo de valor inteiro de 0.
from time import sleep validate_dataset = "validation_with_predictions.csv" # Cut off threshold of 80% cutoff = 0.8 limit = 200 # Need at least 200 samples to compute standard deviations i = 0 with open(f"test_data/{validate_dataset}", "w") as validation_file: validation_file.write("probability,prediction,label\n") # CSV header with open("test_data/validation.csv", "r") as f: for row in f: (label, input_cols) = row.split(",", 1) probability = float(predictor.predict(input_cols)) prediction = "1" if probability > cutoff else "0" baseline_file.write(f"{probability},{prediction},{label}\n") i += 1 if i > limit: break print(".", end="", flush=True) sleep(0.5) print() print("Done!")
Como você habilitou a captura de dados nas etapas anteriores, a carga útil da solicitação e da resposta, além de alguns metadados adicionais, é salva no local do Amazon S3 especificado em DataCaptureConfig
. A entrega dos dados de captura para o Amazon S3 pode exigir alguns minutos.
Visualize dados capturados listando os arquivos de captura de dados armazenados no Amazon S3. O formato do caminho do Amazon S3 é: s3:///
.{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename
.jsonl
Espere ver arquivos diferentes de diferentes períodos de tempo, organizados com base na hora em que a invocação ocorreu. Execute o seguinte para imprimir o conteúdo de um único arquivo de captura:
print("\n".join(capture_file[-3:-1]))
Isso retornará um arquivo formatado em linha JSON específico para SageMaker IA. A seguir está um exemplo de resposta retirado de um endpoint em tempo real que invocamos usando dados csv/text
:
{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"69,0,153.7,109,194.0,105,256.1,114,14.1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.0254181120544672","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"} {"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"94,23,197.1,125,214.5,136,282.2,103,9.5,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.07675473392009735","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}
No exemplo a seguir, o objeto capture_file
é um tipo de lista. Indexe o primeiro elemento da lista para visualizar uma única solicitação de inferência.
# The capture_file object is a list. Index the first element to view a single inference request print(json.dumps(json.loads(capture_file[0]), indent=2))
Essa ação retornará uma resposta semelhante à seguinte: Os valores retornados serão diferentes com base na configuração do endpoint, no modelo de SageMaker IA e nos dados capturados:
{ "captureData": { "endpointInput": { "observedContentType": "text/csv", # data MIME type "mode": "INPUT", "data": "50,0,188.9,94,203.9,104,151.8,124,11.6,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0\n", "encoding": "CSV" }, "endpointOutput": { "observedContentType": "text/csv; charset=character-encoding", "mode": "OUTPUT", "data": "0.023190177977085114", "encoding": "CSV" } }, "eventMetadata": { "eventId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "inferenceTime": "2022-02-14T17:25:06Z" }, "eventVersion": "0" }