Suporte a Artefatos Grandes no Catálogo de Modelos
O tamanho máximo de um artefato de modelo é de 6 GB.
As opções da Console para fazer upload de modelos só suportam artefatos de modelo de até 100 MB de tamanho. Para fazer upload de artefatos de modelo grandes, todos os exemplos a seguir usam Python e ADS. Há suporte para artefatos de modelo grande copiando um artefato de um bucket do Object Storage para o bucket de serviço do catálogo de modelos.
Etapas Preliminares para Usar o ADS
Primeiro, crie alguns métodos de utilitário para que o exemplo funcione:
import os
import oci
import random
import warnings
import numpy as np
import ads
from ads.catalog.model import ModelCatalog
from ads.common.model_metadata import UseCaseType
from ads.model.generic_model import GenericModel
from numpy import array
from numpy import ndarray
from shutil import rmtree
ads.set_auth("resource_principal")
warnings.filterwarnings('ignore')
# ads.set_auth("api_key")
# ads.set_debug_mode(False)
# auth = {"config": oci.config.from_file(os.path.join("~/.oci", "config"))}
from sklearn.datasets import make_classification
import pandas as pd
import os
class Size:
    MB_20 = 6000
    MB_200 = 60000
    MB_2000 = 600000    
def generate_large_csv(size: Size = Size.MB_20, file_path: str = "./large_csv_file.csv"):
    X_big, y_big = make_classification(n_samples=size, n_features=200)
    df_big = pd.concat([pd.DataFrame(X_big), pd.DataFrame(y_big)], axis=0)
    df_big.to_csv(os.path.join(file_path))
Em seguida, crie um modelo de amostra a ser usado nesse exemplo e preencha o modelo com um arquivo CSV de larga escala. Este exemplo usa um arquivo de 20 MB por meio de arquivos de até 6 GB de trabalho.
class Square:
    def predict(self, x):
        x_array = np.array(x)
        return np.ndarray.tolist(x_array * x_array)
    
model = Square()
artifact_dir = "./large_artifact/"
generic_model = GenericModel(
    estimator=model, 
    artifact_dir=artifact_dir
)
generic_model.prepare(
    inference_conda_env="dataexpl_p37_cpu_v3",
    training_conda_env="dataexpl_p37_cpu_v3",
    use_case_type=UseCaseType.MULTINOMIAL_CLASSIFICATION,
    X_sample=X,
    y_sample=array(X) ** 2,
    force_overwrite=True
)
generate_large_csv(Size.MB_20, file_path=os.path.join(artifact_dir, "large_csv_file.csv"))
Salvando um Modelo Grande no Catálogo de Modelos
Você deve ter um bucket do Object Storage para suportar modelos maiores que 2 GB. Você pode criar um bucket na Console ou usando a API do OCI.
Crie um bucket do serviço Object Storage na Console:
- Acesse a Console.
- Abra o menu de navegação e selecione Armazenamento. Em Object Storage & Archive Storage, selecione Buckets.
- Em Escopo da Lista, selecione um Compartimento.
- Selecione Criar Bucket. Especifique as informações do formulário a seguir no formulário Criar Bucket. - Bucket Name: Informe a-bucket-name.
- Default Storage Tier: Selecione Standard. Não selecione as seguintes opções: - Ativar Armazenamento Automático em Camadas
- Ativar Controle de Versão do Objeto
- Emitir Eventos de Objeto
- Limpeza de Uploads Multiparte Não Confirmados
 
- Encryption: Selecione Encrypt using Oracle Managed Keys
 
- Selecione Criar. O bucket é criado.
Construir o URI do Bucket
O URI do bucket não está listado na página de detalhes do bucket na Console; portanto, você mesmo deve criar o URI. Crie o URI do bucket:
- 
Use o seguinte modelo para criar o URI do bucket: oci://<bucket_name>@<namespace>/<objects_folder>/.Substitua o nome do bucket pelo que você criou. Para namespace, use um nome de tenancy (por exemplo: my-tenancy). Para a pasta de objetos, usemy-object-folder.Com os dados fornecidos, o bucket_uriseria:oci://my-bucket-name@my-tenancy/my-object-folder/.
- Para fazer upload de artefatos de modelo grande, adicione dois parâmetros extras ao método GenericModel.save(...):- bucket_uri: (str, optional)O padrão é Nenhum.- O URI do Object Storage para o qual o artefato de modelo é copiado temporariamente. - O - bucket_urisó é necessário para fazer upload de artefatos grandes quando o tamanho é maior que 2 GB. No entanto, você também pode usar o método com pequenos artefatos também. Por exemplo:- oci://<bucket_name>@<namespace>/prefix/.
- remove_existing_artifact: (bool, optional)O padrão é- True.- O método decide se os artefatos submetidos a upload para o bucket do Object Storage devem ser removidos. 
 
- Pegue o artefato de modelo e copie-o de uma sessão de notebook para o bucket_uri.
- Em seguida, copie o artefato do bucket (bucket_uri) para o bucket de serviço.Se o tamanho do artefato maior que 2 GB e bucket_urinão for fornecido, ocorrerá um erro.Por padrão, o atributo remove_existing_artifacté definido comoTrue. O artefato é removido automaticamente do bucket (bucket_uri) após um upload bem-sucedido para o bucket de serviço. Se você não quiser remover o artefato do bucket, defina:remove_existing_artifact = False.
Para resumir, o processo é:
- Prepare artefatos de modelo.
- Salvar informações base sobre o modelo no catálogo de modelos.
- Faça upload de artefatos de modelo para um bucket do Object Storage (bucket_uri).
- Faça upload de artefatos de modelo de um bucket para o bucket de serviço do catálogo de modelos.
- Remova artefatos temporários de um bucket com base no parâmetro remove_existing_artifact:large_model_id = generic_model.save( display_name='Generic Model With Large Artifact', bucket_uri=<provide bucket uri>, remove_existing_artifact=True )
Carregando um Modelo Grande no Catálogo de Modelos
Para carregar modelos maiores que 2 GB, adicione dois parâmetros extras ao método GenericModel.from_model_catalog(...):
- bucket_uri: (str, optional)O padrão é Nenhum.- O URI do Object Storage para o qual os artefatos de modelo são copiados temporariamente. O - bucket_urisó é necessário para fazer download de artefatos grandes com tamanho maior que 2 GB. O método também funciona com os pequenos artefatos. Exemplo:- oci://<bucket_name>@<namespace>/prefix/.
- remove_existing_artifact: (bool, optional)O padrão é `True`.- O método decide se os artefatos submetidos a upload para o bucket do Object Storage devem ser removidos. 
Para resumir, o processo é:
- Faça download dos artefatos de modelo do bucket do Object Storage do serviço de catálogo de modelos para um bucket.
- Faça download dos artefatos de modelo do bucket para a sessão de notebook.
- Remova os artefatos temporários do bucket com base no parâmetro remove_existing_artifact.
- 
Carregue as informações básicas sobre o modelo no catálogo de modelos: large_model = GenericModel.from_model_catalog( large_model_id, "model.pkl", "./downloaded_large_artifact/", bucket_uri=<provide bucket uri> , force_overwrite=True, remove_existing_artifact=True )