Crie e implante um sistema de recomendação com o FeatureStore para gerenciar recursos de ponta a ponta.
Visão geral da arquitetura
O FeatureStore gerencia recursos durante todo o ciclo de vida e conecta serviços da Alibaba Cloud por meio dos SDKs em Python, Go, C++ e Java:
|
Camada |
Função |
Serviços |
|
Dados |
Armazena recursos offline e atende online |
MaxCompute (offline), FeatureDB / Hologres / Tablestore (online) |
|
Gerenciamento de recursos |
Organiza recursos em projetos, entidades e visualizações |
Console do FeatureStore ou SDK em Python |
|
Treinamento |
Exporta conjuntos de treinamento unindo recursos a rótulos |
Framework EasyRec |
|
Atendimento |
Sincroniza recursos, hospeda modelos e orquestra recomendações |
DataWorks (agendamento), EAS (serviço de modelo, SDK em C++), PAI-REC (SDK em Go) |
Para um tutorial detalhado com código, execute o Python Notebook na DSW Gallery.
Para obter informações básicas, leia a Visão geral do FeatureStore.
Em caso de dúvidas, participe do grupo 34415007523 no DingTalk.
Pré-requisitos
Conclua as configurações a seguir:
|
Produto obrigatório |
Ação |
|
Platform for AI (PAI) |
Ative o PAI e crie um workspace do PAI. Ativar o PAI e criar um workspace padrão. |
|
MaxCompute |
|
|
FeatureDB |
Ative o FeatureDB. Criar uma nova fonte de dados online: FeatureDB. Siga as instruções na tela. |
|
DataWorks |
1. Ative o DataWorks e crie um workspace. Criar um workspace. 2. Adquira um grupo de recursos exclusivo para agendamento e anexe-o ao workspace. Usar um grupo de recursos exclusivo para agendamento. 3. Configure uma fonte de dados do MaxCompute para o workspace do PAI. Configurar uma fonte de dados. 4. Anexe um mecanismo de computação do MaxCompute ao workspace do PAI. Anexar um mecanismo do MaxCompute. 5. Anexe um mecanismo de computação do Hologres ao workspace do PAI. Anexar um mecanismo de computação do Hologres. |
|
Object Storage Service (OSS) |
Ative o OSS. Início rápido no console. |
Etapa 1: Preparar dados
Sincronizar tabelas de dados
Cenários típicos de recomendação exigem três tabelas de dados: recursos de usuário, recursos de item e rótulos. Este tutorial utiliza tabelas simuladas no projeto do MaxCompute pai_online_project.
|
Tabela |
Nome |
Entradas por partição |
Tamanho |
|
Usuário |
|
~100.000 |
~70 MB |
|
Item |
|
~100.000 |
~70 MB |
|
Rótulo |
|
~450.000 |
~5 MB |
Execute o SQL a seguir no DataWorks para sincronizar essas tabelas de pai_online_project para seu projeto do MaxCompute.
Criar um nó ODPS SQL
Faça login no console do DataWorks.
No painel de navegação à esquerda, clique em Data Development and O&M > Data Development.
Selecione o workspace do DataWorks criado e clique em Go to Data Studio.
-
Passe o mouse sobre Create e escolha Create Node > MaxCompute > ODPS SQL. Configure os parâmetros do nó.
Parâmetro
Valor sugerido
Node Type
ODPS SQL
Path
Business Flow/Workflow/MaxCompute
Name
Insira um nome personalizado.
Clique em OK.
Executar comandos SQL de sincronização
Na área do nó, execute o SQL a seguir para cada tabela. Em Resource Group, selecione o grupo de recursos exclusivo para agendamento criado.
Sincronizar a tabela de usuários: rec_sln_demo_user_table_preprocess_all_feature_v1 (Clique para ver detalhes)
Sincronizar a tabela de itens: rec_sln_demo_item_table_preprocess_all_feature_v1 (Clique para ver detalhes)
Sincronizar a tabela de rótulos: rec_sln_demo_label_table (Clique para ver detalhes)
Para todas as três tabelas, ${bdp.system.bizdate} deve resolver para estas datas de partição:
ds=20231022
ds=20231023
ds=20231024
Preencha todas as três partições usando o procedimento de backfill de dados na próxima seção.
Realizar backfill de dados
No console do DataWorks, clique em Data Development & O&M > Operation Center no painel de navegação. Selecione o workspace na lista suspensa e clique em Enter Operation Center.
No painel de navegação, clique em Auto Triggered Task O&M > Auto Triggered Task.
Na lista de tarefas acionadas automaticamente, clique na tarefa desejada para visualizar seu grafo acíclico direcionado (DAG).
Clique com o botão direito no nó alvo e escolha Data Backfill > Current Node. Selecione um modo de backfill de dados.
Defina Data Timestamp para o intervalo de 2023-10-22 a 2023-10-24 e clique em Submit.
Verificar sincronização
Confirme se estas tabelas existem no seu projeto do MaxCompute com partições para ds=20231022, ds=20231023 e ds=20231024:
rec_sln_demo_user_table_preprocess_all_feature_v1rec_sln_demo_item_table_preprocess_all_feature_v1rec_sln_demo_label_table
Configurar fontes de dados
O FeatureStore requer um armazenamento offline (MaxCompute) e um armazenamento online (FeatureDB, Hologres ou Tablestore). Este tutorial usa MaxCompute e FeatureDB.
Faça login no PAI console. No painel de navegação, clique em Data Preparation > FeatureStore.
Selecione um workspace e clique em Enter FeatureStore.
-
Configure a fonte de dados do MaxCompute. Na aba Data Source, clique em Create Store e defina os seguintes parâmetros.
Parâmetro
Valor sugerido
Type
MaxCompute
Name
Insira um nome personalizado.
MaxCompute Project Name
Selecione o projeto do MaxCompute criado.
-
Configure a fonte de dados do FeatureDB. Caso já tenha criado uma, pule esta etapa. Na aba Store, clique em Create Store, defina os parâmetros a seguir e clique em Submit.
Parâmetro
Valor sugerido
Type
FeatureDB (Se for o primeiro uso, siga as instruções na tela para ativar)
Name
Não personalizável. O valor padrão é feature_db.
Username
Defina um nome de usuário.
Password
Defina uma senha.
VPC high-speed connection (Optional)
Após configurar com êxito, use o SDK do FeatureStore em uma VPC para acessar o FeatureDB via PrivateLink. Isso reduz a latência e melhora o desempenho.
VPC
Selecione a VPC onde está localizado seu serviço online do FeatureStore.
Zone and vSwitch
Selecione uma zona e um vSwitch. Escolha o vSwitch da zona onde está localizada sua máquina de serviço online. Selecione vSwitches em pelo menos duas zonas para garantir alta disponibilidade.
Instalar o SDK do FeatureStore para Python
Instale o SDK no grupo de recursos exclusivo do DataWorks para agendamento.
Faça login no console do DataWorks.
No painel de navegação à esquerda, clique em Resource Group.
Na aba Exclusive Resource Groups, localize o grupo de recursos onde Purpose está definido como Data Scheduling. Clique no ícone
do recurso de agendamento e escolha O&M Assistant.-
Clique em Create Command e defina os seguintes parâmetros.
Parâmetro
Valor sugerido
Command Name
Insira um nome personalizado. Este tutorial usa install.
Command Type
Manual Input (pip Command Cannot Be Used To Install Third-party Packages)
Command Content
/home/tops/bin/pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple https://feature-store-py.oss-cn-beijing.aliyuncs.com/package/feature_store_py-2.0.2-py3-none-any.whlTimeout
Insira um tempo personalizado.
Clique em OK para criar o comando.
Clique em Command e, na página exibida, clique em Running.
Clique no botão
para visualizar o status de execução mais recente. Quando o status mudar para Successful, a instalação estará concluída.
Etapa 2: Criar e registrar um projeto do FeatureStore
Crie e registre um projeto do FeatureStore usando o console ou o SDK. Independentemente do método escolhido, instale o SDK em Python, pois as etapas posteriores exigem seu uso para exportação do conjunto de treinamento e sincronização de dados.
Método 1: Usar o console
Criar um projeto
Faça login no PAI console. No painel de navegação à esquerda, clique em Data Preparation > FeatureStore.
Selecione um workspace e clique em Enter FeatureStore.
-
Na aba Project, clique em Create Project e defina os seguintes parâmetros.
Parâmetro
Valor sugerido
Name
Insira um nome personalizado. Este tutorial usa fs_demo.
Description
Insira uma descrição personalizada.
Offline Store
Selecione a fonte de dados do MaxCompute criada.
Online Store
Selecione a fonte de dados do FeatureDB criada.
Clique em Submit.
Criar entidades de recursos
Na página Projects do FeatureStore, clique no nome do projeto para visualizar seus detalhes.
-
Na aba Feature Entity, clique em Create Feature Entity e defina os parâmetros para a entidade de usuário.
Parâmetro
Valor sugerido
Feature Entity Name
Insira um nome personalizado. Este tutorial usa user.
Join Id
user_id
Clique em Submit.
-
Clique em Create Feature Entity e defina os parâmetros para a entidade de item.
Parâmetro
Valor sugerido
Feature Entity Name
Insira um nome personalizado. Este tutorial usa item.
Join Id
item_id
Clique em Submit.
Criar visualizações de recursos
-
Na página de detalhes do projeto, acesse a aba Feature View, clique em Create Feature View e defina os parâmetros para a visualização de recursos do usuário.
Parâmetro
Valor sugerido
View Name
Insira um nome personalizado. Este tutorial usa user_table_preprocess_all_feature_v1.
Type
Offline
Write Mode
Use Offline Table
Store
Selecione a fonte de dados do MaxCompute criada.
Feature Table
Selecione a tabela de usuários preparada: rec_sln_demo_user_table_preprocess_all_feature_v1.
Feature Field
Selecione a chave primária user_id.
Synchronize Online Feature Table
Yes
Feature Entity
user
Feature Lifecycle
Mantenha o valor padrão.
Clique em Submit.
-
Clique em Create Feature View e defina os parâmetros para a visualização de recursos do item.
Parâmetro
Valor sugerido
View Name
Insira um nome personalizado. Este tutorial usa item_table_preprocess_all_feature_v1.
Type
Offline
Write Method
Use Offline Table
Store
Selecione a fonte de dados do MaxCompute criada.
Feature Table
Selecione a tabela de itens preparada: rec_sln_demo_item_table_preprocess_all_feature_v1.
Feature Field
Selecione a chave primária item_id.
Synchronize Online Feature Table
Yes
Feature Entity
item
Feature Lifecycle
Mantenha o valor padrão.
Clique em Submit.
Criar uma tabela de rótulos
-
Na página de detalhes do projeto, acesse a aba Label Tables, clique em Create Label Table e defina os seguintes parâmetros.
Parâmetro
Valor sugerido
Store
Selecione a fonte de dados do MaxCompute criada.
Table Name
Selecione a tabela de rótulos preparada: rec_sln_demo_label_table.
Clique em Submit.
Criar um recurso de modelo
-
Na página de detalhes do projeto, acesse a aba Model Features, clique em Create Model Feature e defina os seguintes parâmetros.
Parâmetro
Valor sugerido
Model Feature Name
Insira um nome personalizado. Este tutorial usa fs_rank_v1.
Select Feature
Selecione as visualizações de recursos de usuário e de item criadas.
Label Table Name
Selecione a tabela de rótulos criada: rec_sln_demo_label_table.
Clique em OK.
Na página da lista de recursos de modelo, clique em Details na linha do modelo criado.
Na aba Basic Information da página Model Feature Details, visualize Export Table Name. O nome é fs_demo_fs_rank_v1_trainning_set. Use esta tabela para geração de recursos e treinamento de modelo.
O nome da tabela fs_demo_fs_rank_v1_trainning_set contém "trainning" (com dois n). Isso corresponde ao nome da tabela gerado pelo sistema. Use exatamente essa grafia em todas as referências.
Instalar o SDK
Instale o SDK do FeatureStore para Python caso ainda não tenha feito isso.
Método 2: Usar o SDK em Python
Para consultar as etapas de uso do SDK, acesse a DSW Gallery.
Etapa 3: Exportar o conjunto de treinamento e treinar o modelo
Exportar o conjunto de treinamento
Faça login no console do DataWorks.
No painel de navegação à esquerda, clique em Data Development & O&M > Data Development.
Selecione o workspace do DataWorks criado e clique em Go to Data Studio.
-
Passe o mouse sobre Create e escolha Create Node > MaxCompute > PyODPS 3. Defina os seguintes parâmetros.
Parâmetro
Valor sugerido
Engine Instance
Selecione o mecanismo do MaxCompute criado.
Node Type
PyODPS 3
Path
Business Flow/Workflow/MaxCompute
Name
Insira um nome personalizado.
Clique em Confirm.
Copie o script a seguir para o nó.
from feature_store_py.fs_client import FeatureStoreClient
from feature_store_py.fs_project import FeatureStoreProject
from feature_store_py.fs_datasource import LabelInput, MaxComputeDataSource, TrainingSetOutput
from feature_store_py.fs_features import FeatureSelector
from feature_store_py.fs_config import LabelInputConfig, PartitionConfig, FeatureViewConfig
from feature_store_py.fs_config import TrainSetOutputConfig, EASDeployConfig
import datetime
import sys
from odps.accounts import StsAccount
cur_day = args['dt']
print('cur_day = ', cur_day)
offset = datetime.timedelta(days=-1)
pre_day = (datetime.datetime.strptime(cur_day, "%Y%m%d") + offset).strftime('%Y%m%d')
print('pre_day = ', pre_day)
access_key_id = o.account.access_id
access_key_secret = o.account.secret_access_key
sts_token = None
endpoint = 'paifeaturestore-vpc.cn-beijing.aliyuncs.com'
if isinstance(o.account, StsAccount):
sts_token = o.account.sts_token
fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, security_token=sts_token, endpoint=endpoint)
cur_project_name = 'fs_demo'
project = fs.get_project(cur_project_name)
label_partitions = PartitionConfig(name = 'ds', value = cur_day)
label_input_config = LabelInputConfig(partition_config=label_partitions)
user_partitions = PartitionConfig(name = 'ds', value = pre_day)
feature_view_user_config = FeatureViewConfig(name = 'user_table_preprocess_all_feature_v1',
partition_config=user_partitions)
item_partitions = PartitionConfig(name = 'ds', value = pre_day)
feature_view_item_config = FeatureViewConfig(name = 'item_table_preprocess_all_feature_v1',
partition_config=item_partitions)
feature_view_config_list = [feature_view_user_config, feature_view_item_config]
train_set_partitions = PartitionConfig(name = 'ds', value = cur_day)
train_set_output_config = TrainSetOutputConfig(partition_config=train_set_partitions)
model_name = 'fs_rank_v1'
cur_model = project.get_model(model_name)
task = cur_model.export_train_set(label_input_config, feature_view_config_list, train_set_output_config)
task.wait()
print("task_summary = ", task.task_summary)
-
No painel à direita, clique em Scheduling Configuration e defina os seguintes parâmetros.
Parâmetro
Valor sugerido
Scheduling Parameters
Parameter Name
dt
Parameter Value
$[yyyymmdd-1]
Resource Properties
Scheduling Resource Group
Selecione o grupo de recursos exclusivo para agendamento criado.
Scheduling Dependencies
Selecione a tabela de usuários e a tabela de itens criadas.
Após configurar e testar o nó, salve e envie a configuração.
Visualizar tarefa de exportação (opcional)
Na página Projects do FeatureStore, clique no nome de um projeto para abrir sua página de detalhes.
Na aba Feature Entity, clique em Jobs.
Clique em Details na linha da tarefa desejada para visualizar informações básicas, configuração de execução e logs.
Treinar o modelo
O EasyRec é um framework de recomendação open-source que se integra ao FeatureStore para treinar, exportar e publicar modelos. Utilize a tabela fs_demo_fs_rank_v1_trainning_set como entrada para treinar um modelo com o EasyRec.
|
Recurso |
Link |
|
Código-fonte do EasyRec |
|
|
Documentação do EasyRec |
|
|
Guia de treinamento do EasyRec |
Para dúvidas sobre o EasyRec, participe do grupo de consultoria do PAI no DingTalk (ID do Grupo: 32260796).
Etapa 4: Implantar o modelo
Implante o modelo treinado. O FeatureStore fornece SDKs em Python, Go, C++ e Java para sistemas de recomendação personalizados. Entre em contato com o grupo 32260796 no DingTalk para obter suporte à integração.
Esta seção demonstra a implantação com serviços da Alibaba Cloud.
Agendar sincronização de dados
Agende a sincronização regular das tabelas de recursos de usuários e itens do armazenamento offline para o online.
Faça login no console do DataWorks.
No painel de navegação à esquerda, clique em Data Development & O&M > Data Development.
Selecione o workspace do DataWorks criado e clique em Go to Data Studio.
-
Agendar sincronização para user_table_preprocess_all_feature_v1 (Clique para ver detalhes)
-
Agendar sincronização para item_table_preprocess_all_feature_v1 (Clique para ver detalhes)
Verificar
Após a sincronização, verifique no Hologres se os recursos foram gravados no armazenamento online.
Criar e implantar o serviço de modelo EAS
O EasyRec Processor inclui o SDK do FeatureStore em C++ para recuperação de recursos com baixa latência e alto desempenho. Ele recebe solicitações de pontuação do mecanismo de recomendação, busca os recursos, executa a inferência e retorna as pontuações.
Faça login no console do DataWorks.
No painel de navegação à esquerda, clique em Data Development & O&M > Data Development.
Selecione o workspace do DataWorks criado e clique em Go to Data Studio.
Passe o mouse sobre New e escolha New Node > MaxCompute > PyODPS 3.
Copie o script a seguir.
import os
import json
config = {
"name": "fs_demo_v1",
"metadata": {
"cpu": 4,
"rpc.max_queue_size": 256,
"rpc.enable_jemalloc": 1,
"gateway": "default",
"memory": 16000
},
"model_path": f"oss://beijing0009/EasyRec/deploy/rec_sln_demo_dbmtl_v1/{args['ymd']}/export/final_with_fg", # Path of the trained model. customize the path.
"model_config": {
"access_key_id": f'{o.account.access_id}',
"access_key_secret": f'{o.account.secret_access_key}',
"region": "cn-beijing", # Replace this with the region where PAI is deployed. This tutorial uses cn-beijing as an example.
"fs_project": "fs_demo", # Replace this with the name of your FeatureStore project. This tutorial uses fs_demo as an example.
"fs_model": "fs_rank_v1", # Replace this with the name of your FeatureStore model feature. This tutorial uses fs_rank_v1 as an example.
"fs_entity": "item",
"load_feature_from_offlinestore": True,
"steady_mode": True,
"period": 2880,
"outputs": "probs_is_click,y_ln_playtime,probs_is_praise",
"fg_mode": "tf"
},
"processor": "easyrec-1.9",
"processor_type": "cpp"
}
with open("echo.json", "w") as output_file:
json.dump(config, output_file)
# Run the following line for the first deployment
os.system(f"/home/admin/usertools/tools/eascmd -i {o.account.access_id} -k {o.account.secret_access_key} -e pai-eas.cn-beijing.aliyuncs.com create echo.json")
# Run the following line for scheduled updates
# os.system(f"/home/admin/usertools/tools/eascmd -i {o.account.access_id} -k {o.account.secret_access_key} -e pai-eas.cn-beijing.aliyuncs.com modify fs_demo_v1 -s echo.json")
-
No painel à direita, clique em Scheduling Configuration e defina os seguintes parâmetros.
Parâmetro
Valor sugerido
Scheduling Parameters
Parameter Name
dt
Parameter Value
$[yyyymmdd-1]
Resource Properties
Scheduling Resource Group
Selecione o grupo de recursos exclusivo para agendamento criado.
Scheduling Dependencies
Selecione a tarefa de treinamento correspondente e item_table_preprocess_all_feature_v1.
Após configurar e testar o nó, execute-o e verifique o status da implantação.
Quando a implantação for concluída, comente a linha 34, descomente a linha 37 e envie a tarefa para execução agendada. > Dica: A linha 34 usa
createpara a primeira implantação. A linha 37 usamodifypara atualizações agendadas subsequentes. Após o sucesso da implantação inicial, mude para o comandomodify.(Opcional) Visualize o serviço implantado na aba Inference Service da página Elastic Algorithm Service (EAS). Implantação personalizada.
-
(Opcional) Se sua fonte de dados exigir acesso via VPC (como o Hologres), conecte as VPCs do EAS e da fonte de dados. Para o Hologres:
Localize o VPC ID e o vSwitch ID na página Network Information da instância do Hologres.
Na página do serviço EAS, clique em Configure High-Speed Connection no canto superior direito.
Insira o VPC ID e o vSwitch ID correspondentes.
Insira um Security Group Name. Selecione um grupo de segurança existente ou crie um novo. O Hologres geralmente usa a porta 80. O grupo de segurança deve permitir tráfego nesta porta.
Clique em OK. O serviço ficará disponível após a conclusão da atualização.
Configurar o PAI-REC
O PAI-REC é um serviço de mecanismo de recomendação que integra o SDK do FeatureStore em Go. Ele se conecta ao FeatureStore e ao EAS.
Configurar FeatureStoreConfs
Defina RegionId para a região onde seu produto está localizado. Este tutorial usa cn-beijing. Defina ProjectName para o projeto do FeatureStore criado (fs_demo).
"FeatureStoreConfs": {
"pairec-fs": {
"RegionId": "cn-beijing",
"AccessId": "${AccessKey}",
"AccessKey": "${AccessSecret}",
"ProjectName": "fs_demo"
}
},
Configurar FeatureConfs
Estes parâmetros controlam como o PAI-REC busca os recursos:
|
Parâmetro |
Valor |
Descrição |
|
|
|
Deve corresponder à chave em FeatureStoreConfs. |
|
|
|
Nome do recurso de modelo criado. |
|
|
|
Instrui o SDK em Go a buscar recursos da entidade de usuário. |
"FeatureConfs": {
"recreation_rec": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "pairec-fs",
"FeatureKey": "user:uid",
"FeatureStoreModelName": "fs_rank_v1",
"FeatureStoreEntityName": "user",
"FeatureStore": "user"
}
}
]
}
},
Configurar AlgoConfs
Esta configuração especifica a qual serviço de pontuação de modelo do EAS o PAI-REC se conecta.
|
Parâmetro |
Descrição |
|
|
Deve corresponder ao nome do serviço EAS implantado. |
|
|
Obtenha a URL e o token clicando no nome do serviço na página de serviço de modelo do EAS. Em seguida, na aba Overview, na seção Basic Information, clique em View Endpoint Information. Consulte as Perguntas frequentes sobre o EAS. |
"AlgoConfs": [
{
"Name": "fs_demo_v1",
"Type": "EAS",
"EasConf": {
"Processor": "EasyRec",
"Timeout": 300,
"ResponseFuncName": "easyrecMutValResponseFunc",
"Url": "eas_url_xxx",
"EndpointType": "DIRECT",
"Auth": "eas_token"
}
}
],
Solução de problemas
|
Sintoma |
Possível causa |
Solução |
|
Falha na tarefa de backfill de dados |
Datas de partição incorretas ou dados de origem ausentes |
Verifique se |
|
Falha na instalação do SDK do FeatureStore |
Problemas de conectividade de rede no grupo de recursos exclusivo |
Verifique a conectividade de rede. Confirme se a URL de instalação do pip está acessível a partir do grupo de recursos. |
|
Falha na sincronização de recursos para o armazenamento online |
Configuração incorreta da fonte de dados ou permissões ausentes |
Verifique as configurações das fontes de dados do MaxCompute e do FeatureDB. Confirme se o AccessKey possui permissões de leitura e gravação em ambos os armazenamentos. |
|
Falha na implantação do EAS |
Caminho do modelo incorreto ou recursos insuficientes no EAS |
Verifique o caminho do modelo no OSS. Confirme se o endpoint do EAS ( |
|
O serviço EAS não consegue acessar o Hologres |
Rede VPC não conectada ou grupo de segurança bloqueando a porta 80 |
Configure uma conexão de alta velocidade entre as VPCs do EAS e do Hologres. Garanta que o grupo de segurança permita tráfego na porta 80. |