O RDS SQLFlow é uma solução de IA baseada no AliSQL. Ele oferece um serviço totalmente gerenciado para simplificar a implementação de machine learning. Com serviços integrados de machine learning e extensões SQL, o RDS SQLFlow conecta o AliSQL a um mecanismo de IA, permitindo descrever o fluxo de dados e as estruturas de IA das suas aplicações com código SQL mínimo.
Etapa 1: Configurar o serviço rds_sqlflow
-
Crie uma instância RDS Custom com as seguintes configurações de parâmetros. Para obter instruções detalhadas, consulte Criar uma instância RDS Custom.
Na seção Instance Type, defina Architecture como AI Node.
Em Image, selecione SQLFlow em Default Image.
Use uma instância ECS na mesma região e VPC da instância RDS Custom para conectar-se a ela pelo comando
ssh. Para obter instruções detalhadas, consulte Conectar-se a uma instância RDS Custom.-
Acesse o diretório /home/script e execute o script
start_sqlflow.sh. Esse script cria um processo MySQL local e inicia o contêiner do RDS SQLFlow.cd /home/script ./start_sqlflow.sh -P 50054 -u aliyun_rds -p aliyun_rdsParâmetros:
Parâmetro
Descrição
-PPorta do host mapeada para a porta no contêiner do RDS SQLFlow. O valor padrão é 50054.
-uNome de usuário do processo MySQL. O valor padrão é aliyun_rds.
-pSenha do usuário MySQL. Se você não especificar este parâmetro, o sistema gerará uma senha aleatória.
Saída:
Um certificado Transport Layer Security (TLS). Copie o conteúdo do certificado e salve-o como um arquivo
ca.crtno seu cliente.Um comando de conexão do cliente. Use esse comando para conectar-se ao nó do RDS SQLFlow e especifique a fonte de dados para machine learning.
Save the following content as ca.crt on the client: -----BEGIN CERTIFICATE----- xxx -----END CERTIFICATE----- Connect to SQLFlow with the following command: sqlflow -c ca.crt -d'mysql://aliyun_rds:aliyun_rds@tcp(172.xxx.xxx.xxx:3306)/mysql?maxAllowedPacket=0' -s172.xxx.xxx.xxx:xxx:50054 Also, you can change the mysql config to connect with your own mysql.Resultado: Execute os comandos abaixo para verificar o status da execução do script.
-
Execute o comando
ps -ef | grep mysqlpara verificar o status do processo MySQL.[root@rc-xxx script]# ps -ef | grep mysql mysql 22669 1 0 09:52 ? 00:00:02 /home/u01/mysql80_current/bin/mysqld --defaults-file=/etc/my.cnf root 22811 21833 0 09:57 pts/0 00:00:00 grep --color=auto mysql -
Execute o comando
docker pspara verificar o status do contêiner do RDS SQLFlow.[root@rc-xxx script]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS b8af67093420 rds-sqlflow:latest "bash /start.sh" About a minute ago Up About a minute 50051/tcp, 0.0.0.0:50054->50052/tcp, [::]:50054->50052/tcp
Etapa 2: Conectar-se ao serviço rds_sqlflow
-
Instale o cliente RDS SQLFlow em uma instância ECS na mesma região e VPC da instância RDS Custom e conceda permissões de execução ao cliente.
-
Obtenha o cliente RDS SQLFlow de uma das seguintes formas:
-
Copie o arquivo do cliente RDS SQLFlow do diretório /home da instância RDS Custom para a instância ECS de destino. Este tutorial usa o diretório /home como exemplo.
scp /home/sqlflow root@<private_IP_address_of_the_ECS_instance>:/home -
Baixe o cliente na instância ECS de destino.
wget -O sqlflow "https://forsharelogs.oss-cn-beijing.aliyuncs.com/sqlflow?Expires=1729065153&OSSAccessKeyId=TMP.3KhXUKdnV6VCQmT15btm1k2tLRdWeBh26vq78fg2zJDLLfMAmrXYP2hWJKw64Wq7VWmLQLiMuCPCDiTv5ERnhL7a9e****&Signature=mgbW6Vh5q%2FP8aGxrzz0QtglBUxQ%3D"
-
-
Torne o arquivo
sqlflowexecutável na instância ECS de destino.cd /home chmod +x sqlflow -
Crie um arquivo
ca.crtna instância ECS de destino e cole o conteúdo do certificado TLS gerado na Etapa 1.vim ca.crt
-
-
Use o comando de conexão do cliente gerado durante a execução do script
start_sqlflow.shna Etapa 1 para conectar-se ao serviço rds_sqlflow. Por exemplo, se o clientesqlflowestiver instalado no diretório /home, execute o seguinte comando:/home/sqlflow -c ca.crt -d'mysql://user:password@tcp(mysqlHost:mysqlPort})/mysql?maxAllowedPacket=0' -ssqlflowHost:sqlflowPortParâmetros:
Parâmetro
Descrição
-cArquivo de certificado gerado na Etapa 1.
-dEspecifica a fonte de dados MySQL para o RDS SQLFlow. Exemplo:
'mysql://user:password@tcp(mysqlHost:mysqlPort)/mysql?maxAllowedPacket=0'.-
user: Nome de usuário da fonte de dados MySQL. -
password: Senha do usuário da fonte de dados MySQL. -
mysqlHost: Endpoint da fonte de dados MySQL. -
mysqlPort: Número da porta da fonte de dados MySQL.
NotaPor padrão, o comando de conexão do cliente gerado na Etapa 1 usa o serviço MySQL em execução no servidor do RDS SQLFlow. Você também pode especificar o endpoint de outro serviço MySQL para usar como fonte de dados.
-sEspecifica o endpoint do servidor do RDS SQLFlow. Exemplo:
sqlflowHost:sqlflowPort.-
sqlflowHost: Endpoint do servidor do RDS SQLFlow, correspondente ao endereço IP privado da instância RDS Custom. -
sqlflowPort: Número da porta do servidor do RDS SQLFlow.
Exemplo:
/home/sqlflow -c ca.crt -d'mysql://aliyun_rds:aliyun@tcp(47.XXX.XXX.153:3306})/mysql?maxAllowedPacket=0' -s172.XXX.XXX.180:50054A mensagem
Welcome to SQLFlowindica que a conexão foi estabelecida com sucesso e que você acessou o SQLFlow CLI. -
Etapa 3: Preparar dados
O RDS SQLFlow requer uma fonte de dados MySQL para machine learning.
A fonte de dados MySQL pode ser o banco de dados MySQL em execução no servidor do RDS SQLFlow ou outro banco de dados MySQL, como uma instância do ApsaraDB RDS for MySQL.
Este tutorial usa o banco de dados MySQL no servidor do RDS SQLFlow para construir o conjunto de dados Iris e treinar um algoritmo TensorFlow DNNClassifier. O DNNClassifier é adequado para classificar grandes conjuntos de dados que usam dados unidimensionais como entrada e possuem padrões internos complexos de difícil interpretação.
O conjunto de dados Iris deste tutorial contém quatro recursos e um rótulo. Os quatro recursos descrevem a morfologia botânica de cada flor de íris e são representados como números de ponto flutuante. O rótulo representa a subespécie de cada flor de íris como um número inteiro, que pode ser 0, 1 ou 2. No TensorFlow, uma coluna de recurso atua como uma ponte entre uma coluna nos seus dados e um recurso usado para treinar o modelo. O TensorFlow fornece vários tipos de colunas de recurso. Para obter mais informações, consulte a documentação oficial do TensorFlow. A tabela abaixo descreve as colunas no conjunto de dados Iris.
|
Nome |
Tipo |
Descrição |
|
sepal_length |
float |
Recurso. Comprimento da sépala. Unidade: cm. |
|
sepal_width |
float |
Recurso. Largura da sépala. Unidade: cm. |
|
petal_length |
float |
Recurso. Comprimento da pétala. Unidade: cm. |
|
petal_width |
float |
Recurso. Largura da pétala. Unidade: cm. |
|
class |
int |
Rótulo. Categoria da subespécie. Valores válidos: 0, 1 e 2. |
No SQLFlow CLI, execute as seguintes instruções SQL para criar o conjunto de dados de treinamento e o conjunto de dados de avaliação para machine learning.
Etapa 4: Treinar o modelo
No SQLFlow CLI, execute a seguinte instrução SQL para treinar um modelo DNNClassifier de três classes. O modelo possui duas camadas ocultas com 100 nós cada. A taxa de aprendizado do otimizador é 0,1 e o treinamento executa por 10 épocas.
CREATE DATABASE IF NOT EXISTS sqlflow_models;
SELECT * FROM iris.train -- Specify iris.train as the training dataset.
TO TRAIN DNNClassifier WITH
model.n_classes = 3, -- Set the number of classes to 3.
model.hidden_units = [100, 100], -- Specify two hidden layers, each with 100 units.
optimizer.learning_rate=0.1, -- Set the learning rate to 0.1.
train.epoch = 10 -- Set the number of training epochs to 10.
COLUMN sepal_length, sepal_width, petal_length, petal_width -- Specify the feature columns.
LABEL class -- Specify the label column as class.
INTO sqlflow_models.my_dnn_model; -- Save the trained model to the specified table.
Etapa 5: Avaliar o modelo
-
Use o conjunto de dados
iris.testpara avaliar o modelosqlflow_models.my_dnn_model. Os resultados da avaliação são salvos na tabelasqlflow_models.evaluate_result_table.SELECT * FROM iris.test TO EVALUATE sqlflow_models.my_dnn_model WITH validation.metrics = Accuracy LABEL class INTO sqlflow_models.evaluate_result_table; SELECT * FROM sqlflow_models.evaluate_result_table; -
Após a conclusão da avaliação, execute a seguinte instrução SQL para visualizar os resultados. Você pode ajustar os parâmetros do modelo com base nesses resultados.
SELECT * FROM sqlflow_models.evaluate_result_table;Resultado:
+----------------------+----------+ | LOSS | ACCURACY | +----------------------+----------+ | 0.035312581807374954 | 1 | +----------------------+----------+
Etapa 6: Fazer previsões
-
Use o modelo
sqlflow_models.my_dnn_modelpara fazer previsões. Os resultados são gravados na colunaclassda tabelairis.predict. A instrução de previsão é a seguinte:SELECT * FROM iris.test TO PREDICT iris.predict.class USING sqlflow_models.my_dnn_model; -
Após a conclusão da previsão, execute a seguinte instrução SQL para visualizar os resultados.
SELECT * FROM iris.predict LIMIT 5;Resultado:
+--------------+-------------+--------------+-------------+-------+ | SEPAL LENGTH | SEPAL WIDTH | PETAL LENGTH | PETAL WIDTH | CLASS | +--------------+-------------+--------------+-------------+-------+ | 6.3 | 2.7 | 4.9 | 1.8 | 2 | | 5.7 | 2.8 | 4.1 | 1.3 | 1 | | 5 | 3 | 1.6 | 0.2 | 0 | | 6.3 | 3.3 | 6 | 2.5 | 2 | | 5 | 3.5 | 1.6 | 0.6 | 0 | +--------------+-------------+--------------+-------------+-------+