Uso de una canalización OpenSearch de ingestión con aprendizaje automático (inferencia por lotes offline) - OpenSearch Servicio Amazon

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de una canalización OpenSearch de ingestión con aprendizaje automático (inferencia por lotes offline)

Las canalizaciones de OpenSearch Amazon Ingestion (OSI) admiten el procesamiento de inferencias por lotes fuera de línea con aprendizaje automático (ML) para enriquecer de manera eficiente grandes volúmenes de datos a bajo costo. Utilice la inferencia por lotes sin conexión siempre que tenga conjuntos de datos grandes que puedan procesarse de forma asíncrona. La inferencia de lotes sin conexión funciona con Amazon Bedrock y SageMaker modelos. Esta función está disponible en todos los dominios Regiones de AWS compatibles con OpenSearch Ingestion with OpenSearch Service 2.17 o más.

nota

Para el procesamiento de inferencias en tiempo real, utilice. Conectores Amazon OpenSearch Service ML para plataformas de terceros

El procesamiento de inferencias por lotes fuera de línea aprovecha una función OpenSearch llamada ML Commons. ML Commons proporciona algoritmos de aprendizaje automático mediante llamadas a la API REST y de transporte. Estas llamadas eligen los nodos y los recursos correctos para cada solicitud de aprendizaje automático y supervisan las tareas de aprendizaje automático para garantizar el tiempo de actividad. De esta forma, ML Commons le permite aprovechar los algoritmos de aprendizaje automático de código abierto existentes y reducir el esfuerzo necesario para desarrollar nuevas funciones de aprendizaje automático. Para obtener más información sobre ML Commons, consulte Aprendizaje automático en la documentación de OpenSearch .org.

Funcionamiento

Puede crear una canalización de inferencias por lotes sin conexión en OpenSearch Ingestion añadiendo un procesador de inferencias de aprendizaje automático a una canalización. Este procesador permite que tu canalización se conecte a servicios de IA, por ejemplo, SageMaker para ejecutar trabajos de inferencia por lotes. Puede configurar su procesador para que se conecte al servicio de IA que desee a través de los conectores de IA (compatibles con batch_predict) que se ejecutan en su dominio de destino.

OpenSearch Ingestion utiliza el ml_inference procesador con ML Commons para crear trabajos de inferencia por lotes sin conexión a Internet. A continuación, ML Commons utiliza la API batch_predict, que realiza inferencias sobre conjuntos de datos de gran tamaño en un modo asíncrono sin conexión mediante un modelo implementado en servidores de modelos externos en Amazon Bedrock, Amazon, Cohere y OpenAI. SageMaker El siguiente diagrama muestra una canalización de OpenSearch ingestión que organiza varios componentes para llevar a cabo este proceso de principio a fin:

Arquitectura de tres canales de procesamiento de inferencias mediante IA por lotes.

Los componentes de la canalización funcionan de la siguiente manera:

Pipeline 1 (Preparación y transformación de datos) *:

  • Fuente: los datos se escanean desde una fuente externa con la ayuda de OpenSearch Ingestion.

  • Procesadores de datos: los datos sin procesar se procesan y transforman al formato correcto para la inferencia por lotes en el servicio de IA integrado.

  • S3 (Sumidero): los datos procesados se almacenan en un depósito de Amazon S3 y están listos para servir como entrada para ejecutar trabajos de inferencia por lotes en el servicio de IA integrado.

Pipeline 2 (Trigger ML batch_inference):

  • Fuente: detección automática de eventos de S3 de nuevos archivos creados por la salida de Pipeline 1.

  • Procesador ML_Inference: procesador que genera inferencias de aprendizaje automático mediante un trabajo por lotes asíncrono. Se conecta a los servicios de IA a través del conector de IA configurado que se ejecuta en el dominio de destino.

  • ID de tarea: cada trabajo por lotes está asociado a un ID de tarea en ml-commons para su seguimiento y administración.

  • OpenSearch ML Commons: ML Commons, que aloja el modelo de búsqueda neuronal en tiempo real, administra los conectores a los servidores remotos de IA y sirve APIs para la inferencia de lotes y la gestión de trabajos.

  • Servicios de IA: OpenSearch ML Commons interactúa con servicios de IA como Amazon Bedrock y Amazon SageMaker para realizar inferencias por lotes de los datos, produciendo predicciones o información. Los resultados se guardan de forma asíncrona en un archivo S3 independiente.

Canalización 3 (ingestión masiva):

  • S3 (fuente): los resultados de los trabajos por lotes se almacenan en S3, que es la fuente de esta canalización.

  • Procesadores de transformación de datos: el procesamiento y la transformación adicionales se aplican al resultado de la inferencia del lote antes de la ingestión. Esto garantiza que los datos estén mapeados correctamente en el índice. OpenSearch

  • OpenSearch índice (sumidero): los resultados procesados se indexan OpenSearch para almacenarlos, buscarlos y analizarlos más a fondo.

nota

*El proceso descrito por Pipeline 1 es opcional. Si lo prefiere, puede omitir ese proceso y simplemente cargar los datos preparados en el receptor S3 para crear trabajos por lotes.

Acerca del procesador ml_inference

OpenSearch Ingestion utiliza una integración especializada entre la fuente de S3 Scan y el procesador de inferencias ML para el procesamiento por lotes. El S3 Scan funciona solo en modo de metadatos para recopilar de manera eficiente la información de los archivos S3 sin leer el contenido real del archivo. El ml_inference procesador utiliza el archivo S3 URLs para coordinar con ML Commons el procesamiento por lotes. Este diseño optimiza el flujo de trabajo de inferencia por lotes al minimizar la transferencia de datos innecesaria durante la fase de escaneo. El ml_inference procesador se define mediante parámetros. A continuación se muestra un ejemplo:

processor: - ml_inference: # The endpoint URL of your OpenSearch domain host: "https://AWS test-offlinebatch-123456789abcdefg.us-west-2.es.amazonaws.com" # Type of inference operation: # - batch_predict: for batch processing # - predict: for real-time inference action_type: "batch_predict" # Remote ML model service provider (Amazon Bedrock or SageMaker) service_name: "bedrock" # Unique identifier for the ML model model_id: "AWS TestModelID123456789abcde" # S3 path where batch inference results will be stored output_path: "s3://amzn-s3-demo-bucket/" # Supports ISO_8601 notation strings like PT20.345S or PT15M # These settings control how long to keep your inputs in the processor for retry on throttling errors retry_time_window: "PT9M" # AWS configuration settings aws: # Región de AWS where the Lambda function is deployed region: "us-west-2" # IAM role ARN for Lambda function execution sts_role_arn: "arn:aws::iam::account_id:role/Admin" # Dead-letter queue settings for storing errors dlq: s3: region: us-west-2 bucket: batch-inference-dlq key_path_prefix: bedrock-dlq sts_role_arn: arn:aws:iam::account_id:role/OSI-invoke-ml # Conditional expression that determines when to trigger the processor # In this case, only process when bucket matches "amzn-s3-demo-bucket" ml_when: /bucket == "amzn-s3-demo-bucket"

Mejoras en el rendimiento de ingestión mediante el procesador ml_inference

El ml_inference procesador de OpenSearch ingestión mejora significativamente el rendimiento de la ingesta de datos para las búsquedas habilitadas para ML. El procesador es ideal para casos de uso que requieren datos generados por modelos de aprendizaje automático, como la búsqueda semántica, la búsqueda multimodal, el enriquecimiento de documentos y la comprensión de consultas. En la búsqueda semántica, el procesador puede acelerar la creación e ingesta de vectores de gran volumen y alta dimensión en un orden de magnitud.

La capacidad de inferencia por lotes fuera de línea del procesador ofrece claras ventajas en comparación con la invocación de modelos en tiempo real. Si bien el procesamiento en tiempo real requiere un servidor modelo en vivo con limitaciones de capacidad, la inferencia por lotes escala dinámicamente los recursos de cómputo bajo demanda y procesa los datos en paralelo. Por ejemplo, cuando la canalización de OpenSearch ingestión recibe mil millones de solicitudes de datos de origen, crea 100 archivos S3 para la entrada de inferencias por lotes de aprendizaje automático. A continuación, el ml_inference procesador inicia un trabajo SageMaker por lotes con 100 instancias de ml.m4.xlarge Amazon Elastic Compute Cloud (Amazon EC2) y completa la vectorización de mil millones de solicitudes en 14 horas, una tarea que sería prácticamente imposible de realizar en tiempo real.

Configure el procesador ml_inference para que ingiera las solicitudes de datos para una búsqueda semántica

Los siguientes procedimientos le guiarán por el proceso de instalación y configuración del ml_inference procesador de OpenSearch ingestión para procesar mil millones de solicitudes de datos con fines de búsqueda semántica mediante un modelo de incrustación de texto.

Paso 1: Cree conectores y registre modelos en OpenSearch

Para el siguiente procedimiento, utilice el batch_inference_sagemaker_connector_blueprint de ML Commons para crear un conector y un modelo en Amazon. SageMaker Si prefiere usar plantillas de integración, consulte más adelante en esta sección. OpenSearch CloudFormation (Procedimiento alternativo) Paso 1: Cree conectores y modelos mediante una plantilla de CloudFormation integración

Para crear conectores y registrar modelos en OpenSearch
  1. Cree un modelo ML de Deep Java Library (DJL) SageMaker para la transformación por lotes. Para ver otros modelos de DJL, consulte Semantic_Search_With_CFN_Template_for_SageMaker en: GitHub

    POST https://api.sagemaker.us-east-1.amazonaws.com/CreateModel { "ExecutionRoleArn": "arn:aws:iam::123456789012:role/aos_ml_invoke_sagemaker", "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines", "PrimaryContainer": { "Environment": { "SERVING_LOAD_MODELS" : "djl://ai.djl.huggingface.pytorch/sentence-transformers/all-MiniLM-L6-v2" }, "Image": "763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.29.0-cpu-full" } }
  2. Cree un batch_predict conector action con el nuevo tipo en el campo: actions

    POST /_plugins/_ml/connectors/_create { "name": "DJL Sagemaker Connector: all-MiniLM-L6-v2", "version": "1", "description": "The connector to sagemaker embedding model all-MiniLM-L6-v2", "protocol": "aws_sigv4", "credential": { "roleArn": "arn:aws:iam::111122223333:role/SageMakerRole" }, "parameters": { "region": "us-east-1", "service_name": "sagemaker", "DataProcessing": { "InputFilter": "$.text", "JoinSource": "Input", "OutputFilter": "$" }, "MaxConcurrentTransforms": 100, "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines", "TransformInput": { "ContentType": "application/json", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://offlinebatch/msmarcotests/" } }, "SplitType": "Line" }, "TransformJobName": "djl-batch-transform-1-billion", "TransformOutput": { "AssembleWith": "Line", "Accept": "application/json", "S3OutputPath": "s3://offlinebatch/msmarcotestsoutputs/" }, "TransformResources": { "InstanceCount": 100, "InstanceType": "ml.m4.xlarge" }, "BatchStrategy": "SingleRecord" }, "actions": [ { "action_type": "predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://runtime.sagemaker.us-east-1.amazonaws.com/endpoints/OpenSearch-sagemaker-060124023703/invocations", "request_body": "${parameters.input}", "pre_process_function": "connector.pre_process.default.embedding", "post_process_function": "connector.post_process.default.embedding" }, { "action_type": "batch_predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://api.sagemaker.us-east-1.amazonaws.com/CreateTransformJob", "request_body": """{ "BatchStrategy": "${parameters.BatchStrategy}", "ModelName": "${parameters.ModelName}", "DataProcessing" : ${parameters.DataProcessing}, "MaxConcurrentTransforms": ${parameters.MaxConcurrentTransforms}, "TransformInput": ${parameters.TransformInput}, "TransformJobName" : "${parameters.TransformJobName}", "TransformOutput" : ${parameters.TransformOutput}, "TransformResources" : ${parameters.TransformResources}}""" }, { "action_type": "batch_predict_status", "method": "GET", "headers": { "content-type": "application/json" }, "url": "https://api.sagemaker.us-east-1.amazonaws.com/DescribeTransformJob", "request_body": """{ "TransformJobName" : "${parameters.TransformJobName}"}""" }, { "action_type": "cancel_batch_predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://api.sagemaker.us-east-1.amazonaws.com/StopTransformJob", "request_body": """{ "TransformJobName" : "${parameters.TransformJobName}"}""" } ] }
  3. Utilice el ID de conector devuelto para registrar el SageMaker modelo:

    POST /_plugins/_ml/models/_register { "name": "SageMaker model for batch", "function_name": "remote", "description": "test model", "connector_id": "example123456789-abcde" }
  4. Invoque el modelo con el tipo de batch_predict acción:

    POST /_plugins/_ml/models/teHr3JABBiEvs-eod7sn/_batch_predict { "parameters": { "TransformJobName": "SM-offline-batch-transform" } }

    La respuesta contiene un identificador de tarea para el trabajo por lotes:

    { "task_id": "exampleIDabdcefd_1234567", "status": "CREATED" }
  5. Comprueba el estado del trabajo por lotes llamando a la API Get Task con el ID de tarea:

    GET /_plugins/_ml/tasks/exampleIDabdcefd_1234567

    La respuesta contiene el estado de la tarea:

    { "model_id": "nyWbv5EB_tT1A82ZCu-e", "task_type": "BATCH_PREDICTION", "function_name": "REMOTE", "state": "RUNNING", "input_type": "REMOTE", "worker_node": [ "WDZnIMcbTrGtnR4Lq9jPDw" ], "create_time": 1725496527958, "last_update_time": 1725496527958, "is_async": false, "remote_job": { "TransformResources": { "InstanceCount": 1, "InstanceType": "ml.c5.xlarge" }, "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines", "TransformOutput": { "Accept": "application/json", "AssembleWith": "Line", "KmsKeyId": "", "S3OutputPath": "s3://offlinebatch/output" }, "CreationTime": 1725496531.935, "TransformInput": { "CompressionType": "None", "ContentType": "application/json", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://offlinebatch/sagemaker_djl_batch_input.json" } }, "SplitType": "Line" }, "TransformJobArn": "arn:aws:sagemaker:us-east-1:111122223333:transform-job/SM-offline-batch-transform15", "TransformJobStatus": "InProgress", "BatchStrategy": "SingleRecord", "TransformJobName": "SM-offline-batch-transform15", "DataProcessing": { "InputFilter": "$.content", "JoinSource": "Input", "OutputFilter": "$" } } }

(Procedimiento alternativo) Paso 1: Cree conectores y modelos mediante una plantilla de CloudFormation integración

Si lo prefiere, puede utilizarlos AWS CloudFormation para crear automáticamente todos los SageMaker conectores y modelos de Amazon necesarios para la inferencia de aprendizaje automático. Este enfoque simplifica la configuración mediante el uso de una plantilla preconfigurada disponible en la consola de Amazon OpenSearch Service. Para obtener más información, consulte Se utiliza CloudFormation para configurar la inferencia remota para la búsqueda semántica.

Para implementar una CloudFormation pila que cree todos los SageMaker conectores y modelos necesarios
  1. Abre la consola OpenSearch de Amazon Service.

  2. En el panel de navegación, elija Integraciones.

  3. En el campo de búsqueda, introduce ySageMaker, a continuación, selecciona Integración con modelos de incrustación de texto a través de Amazon SageMaker.

  4. Selecciona Configurar dominio y, a continuación, selecciona Configurar dominio de VPC o Configurar dominio público.

  5. Introduce la información en los campos de la plantilla. En Habilitar la inferencia de lotes sin conexión, elija true para aprovisionar recursos para el procesamiento por lotes sin conexión.

  6. Seleccione Crear para crear la CloudFormation pila.

  7. Una vez creada la pila, abra la pestaña Salidas en la CloudFormation consola y busque el connector_id y el model_id. Necesitará estos valores más adelante, cuando configure la canalización.

Paso 2: Cree una canalización de OpenSearch ingestión para la inferencia de lotes de ML sin conexión

Utilice el siguiente ejemplo para crear una canalización de OpenSearch ingestión para la inferencia de lotes de ML sin conexión. Para obtener más información sobre la creación de una canalización para OpenSearch Ingestion, consulte. Creación de canalizaciones OpenSearch de Amazon Ingestion

Antes de empezar

En el siguiente ejemplo, se especifica un ARN de rol de IAM para sts_role_arn el parámetro. Utilice el siguiente procedimiento para comprobar que este rol está asignado al rol de backend que tiene acceso a ml-commons en. OpenSearch

  1. Navegue hasta el complemento OpenSearch Dashboards de su dominio de servicio. OpenSearch Puedes encontrar el punto de conexión del panel de control en el panel de control de tu dominio, en la consola de OpenSearch servicio.

  2. En el menú principal, seleccione Seguridad, Roles y seleccione el rol ml_full_access.

  3. Seleccione Usuarios asignados, Administrar mapeo.

  4. En Funciones de backend, introduzca el ARN de la función Lambda que necesita permiso para llamar a su dominio. Este es un ejemplo: arn:aws:iam: ::role/ 111122223333 lambda-role

  5. Seleccione Asignar y confirme que el usuario o el rol aparecen en Usuarios asignados.

Ejemplo de creación de una canalización de ingestión para la inferencia de lotes offline de ML OpenSearch

version: '2' extension: osis_configuration_metadata: builder_type: visual sagemaker-batch-job-pipeline: source: s3: acknowledgments: true delete_s3_objects_on_read: false scan: buckets: - bucket: name: name data_selection: metadata_only filter: include_prefix: - sagemaker/sagemaker_djl_batch_input exclude_suffix: - .manifest - bucket: name: name data_selection: data_only filter: include_prefix: - sagemaker/output/ scheduling: interval: PT6M aws: region: name default_bucket_owner: account_ID codec: ndjson: include_empty_objects: false compression: none workers: '1' processor: - ml_inference: host: "https://search-AWStest-offlinebatch-123456789abcdef.us-west-2.es.amazonaws.com" aws_sigv4: true action_type: "batch_predict" service_name: "sagemaker" model_id: "model_ID" output_path: "s3://AWStest-offlinebatch/sagemaker/output" aws: region: "us-west-2" sts_role_arn: "arn:aws:iam::account_ID:role/Admin" ml_when: /bucket == "AWStest-offlinebatch" dlq: s3: region: us-west-2 bucket: batch-inference-dlq key_path_prefix: bedrock-dlq sts_role_arn: arn:aws:iam::account_ID:role/OSI-invoke-ml - copy_values: entries: - from_key: /text to_key: chapter - from_key: /SageMakerOutput to_key: chapter_embedding - delete_entries: with_keys: - text - SageMakerOutput sink: - opensearch: hosts: ["https://search-AWStest-offlinebatch-123456789abcdef.us-west-2.es.amazonaws.com"] aws: serverless: false region: us-west-2 routes: - ml-ingest-route index_type: custom index: test-nlp-index routes: - ml-ingest-route: /chapter != null and /title != null

Paso 3: Prepare los datos para la ingestión

Para preparar los datos para el procesamiento de inferencias por lotes de aprendizaje automático fuera de línea, prepare los datos usted mismo con sus propias herramientas o procesos o utilice el OpenSearch Data Prepper. Compruebe que los datos estén organizados en el formato correcto, ya sea mediante una canalización para consumir los datos de la fuente de datos o creando un conjunto de datos de aprendizaje automático.

El siguiente ejemplo usa el conjunto de datos MS MARCO, que incluye una colección de consultas de usuarios reales para tareas de procesamiento del lenguaje natural. El conjunto de datos está estructurado en formato JSONL, donde cada línea representa una solicitud enviada al modelo de incrustación de ML:

{"_id": "1185869", "text": ")what was the immediate impact of the Paris Peace Treaties of 1947?", "metadata": {"world war 2"}} {"_id": "1185868", "text": "_________ justice is designed to repair the harm to victim, the community and the offender caused by the offender criminal act. question 19 options:", "metadata": {"law"}} {"_id": "597651", "text": "what is amber", "metadata": {"nothing"}} {"_id": "403613", "text": "is autoimmune hepatitis a bile acid synthesis disorder", "metadata": {"self immune"}} ...

Para realizar una prueba con el conjunto de datos MS MARCO, imagine un escenario en el que cree mil millones de solicitudes de entrada distribuidas en 100 archivos, cada uno con 10 millones de solicitudes. Los archivos se almacenarían en Amazon S3 con el prefijo s3://offlinebatch/sagemaker/sagemaker_djl_batch_input/. El proceso OpenSearch de ingestión escanearía estos 100 archivos simultáneamente e iniciaría un trabajo SageMaker por lotes con 100 trabajadores para su procesamiento en paralelo, lo que permitiría la vectorización y la ingestión eficientes de los mil millones de documentos en los que se encuentran. OpenSearch

En los entornos de producción, puede utilizar una canalización de OpenSearch ingestión para generar archivos S3 para la entrada de datos por lotes. La canalización admite varias fuentes de datos y funciona según un cronograma para transformar continuamente los datos de origen en archivos S3. Luego, los servidores de IA procesan automáticamente estos archivos mediante trabajos por lotes programados fuera de línea, lo que garantiza el procesamiento y la ingesta continuos de datos.

Paso 4: Supervise el trabajo de inferencia por lotes

Puede supervisar los trabajos de inferencia por lotes mediante la SageMaker consola o el. AWS CLI También puede utilizar la API Get Task para supervisar los trabajos por lotes:

GET /_plugins/_ml/tasks/_search { "query": { "bool": { "filter": [ { "term": { "state": "RUNNING" } } ] } }, "_source": ["model_id", "state", "task_type", "create_time", "last_update_time"] }

La API devuelve una lista de tareas de trabajo por lotes activas:

{ "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 3, "relation": "eq" }, "max_score": 0.0, "hits": [ { "_index": ".plugins-ml-task", "_id": "nyWbv5EB_tT1A82ZCu-e", "_score": 0.0, "_source": { "model_id": "nyWbv5EB_tT1A82ZCu-e", "state": "RUNNING", "task_type": "BATCH_PREDICTION", "create_time": 1725496527958, "last_update_time": 1725496527958 } }, { "_index": ".plugins-ml-task", "_id": "miKbv5EB_tT1A82ZCu-f", "_score": 0.0, "_source": { "model_id": "miKbv5EB_tT1A82ZCu-f", "state": "RUNNING", "task_type": "BATCH_PREDICTION", "create_time": 1725496528123, "last_update_time": 1725496528123 } }, { "_index": ".plugins-ml-task", "_id": "kiLbv5EB_tT1A82ZCu-g", "_score": 0.0, "_source": { "model_id": "kiLbv5EB_tT1A82ZCu-g", "state": "RUNNING", "task_type": "BATCH_PREDICTION", "create_time": 1725496529456, "last_update_time": 1725496529456 } } ] } }

Tras supervisar el trabajo de inferencia por lotes y confirmar que se ha completado, puede ejecutar varios tipos de búsquedas de IA, incluidas las semánticas, las híbridas, las conversacionales (con RAG), las dispersas neuronales y las multimodales. Para obtener más información sobre las búsquedas de IA compatibles con el Servicio, consulte Búsqueda de OpenSearch IA.

Para buscar vectores sin procesar, utilice el tipo de knn consulta, proporcione la vector matriz como entrada y especifique el k número de resultados devueltos:

GET /my-raw-vector-index/_search { "query": { "knn": { "my_vector": { "vector": [0.1, 0.2, 0.3], "k": 2 } } } }

Para ejecutar una búsqueda basada en la IA, utilice el tipo de neural consulta. Especifique la query_text entrada, el modelo model_id de incrustación que configuró en la canalización de OpenSearch ingestión y el k número de resultados devueltos. Para excluir las incrustaciones de los resultados de búsqueda, especifique el nombre del campo de incrustación en el parámetro: _source.excludes

GET /my-ai-search-index/_search { "_source": { "excludes": [ "output_embedding" ] }, "query": { "neural": { "output_embedding": { "query_text": "What is AI search?", "model_id": "mBGzipQB2gmRjlv_dOoB", "k": 2 } } } }