Treine modelos de aprendizado de máquina com vários núcleos de CPU

Conteúdo

Visão geral

  • Introdução
  • reduzir o tempo de execução
  • conjunto de dados
  • ler conjunto de dados
  • gestão de variáveis ​​categóricas
  • característica dependente e independente
  • Treinamento de modelos con núcleos de CPU
  • Nota final

Introdução

“o 65.536 processadores estavam dentro da máquina de conexão”

~ Philip Emeagwali

Todos nós temos formação em ciência da computação, usamos um computador diariamente e temos uma melhor compreensão do que é o computador. Os computadores têm um coração como o dos humanos, é chamado de CPU.

Todos nós conhecemos a CPU, sim, não é assim, a UPC é a unidade de processamento central no computador, ou é um circuito eletrônico que executa as várias instruções que compõem um programa de computador. A CPU realiza aritmética básica, lógica, etc.

80576sep_cpu-8016078

Gerações anteriores de CPUs foram implementadas como componentes discretos e vários pequenos ICs em uma ou mais placas de circuito. Com o tempo, CPUs são alteradas, São atualizados. Eles são implementados em um circuito integrado, com uma ou mais CPUs em um único chip IC. Existem muitas funções ou operações que o computador executa, então leva muito tempo, para isso, o cientista projetou o processadores multicore, era uma combinação de chips de microprocessador com múltiplas CPUs.

Processadores multi-core são muito rápidos, pode trabalhar daqui a pouco. Como cientista de dados, descobrimos que algumas das bibliotecas Python são muito lentas e também longas, desacelerar a execução do programa, se necesita mucho tiempo para a ejecución dos nossos modelos de aprendizagem automática o aprendizado profundo. Se você quiser ver quantos núcleos estão em seu computador, apenas abra o seu Painel Controle e pesquisar sistema você verá todas as informações sobre o seu computador.

43098ampulheta-800x500-9272954

Se falarmos sobre a biblioteca python panda que é usada em aprendizado de máquina para manipulação de dados e análise de dados, se analisarmos uma pequena quantidade de dados, não demorará tanto para realizar as operações, mas e se nosso conjunto de dados for grande? sem saber, levará muito tempo para realizar cálculos em uma grande quantidade de dados. Então, Isto é um grande problema, que todos os cientistas de dados enfrentam em suas carreiras. E se reduzirmos este tempo? é benéfico para nós?

nós discutiremos abaixo:

Reduza o tempo de execução

Acima temos uma breve discussão sobre a CPU, então, que significa? Significa que usamos núcleos da unidade central de processamento para entrenar o nosso modelo de aprendizagem automático. Hay uno de los parametros especiales dentro del algoritmo de aprendizaje automático que normalmente lo usamos, mas não temos conhecimento sobre isso ou não. Eu sei o significado exato disso, Isso parece incrível!

Esses núcleos de CPU são partes muito importantes do treinamento de qualquer modelo de aprendizado de máquina., isso também é importante ao trabalhar com aprendizado profundo, porque esses núcleos de CPU serão possíveis programação paralela ou execução paralela do programa. Não podemos treinar modelos de aprendizado de máquina com a ajuda de GPUs, portanto, CPUs são mais úteis nesta condição.

Para treinamento de aprendizado de máquina mais rápido em qualquer projeto de aprendizado de máquina, você pode usar esses núcleos de CPU, desde que tenha uma grande quantidade de dados no conjunto de dados para treinar o modelo de aprendizado de máquina.

Agora, vemos como treinamos o modelo de aprendizado de máquina usando núcleos de CPU para melhorar o desempenho em relação ao modelo de aprendizado de máquina:

Conjunto de dados

Para treinar esta declaração de problema particular, temos que levar o Wine_Quality conjunto de dados, o link de referência para este conjunto de dados é aqui.

Para entender melhor este conjunto de dados, você pode verificar este link: Clique aqui

Lembre-se se você tiver que resolver este problema específico com núcleos de CPU, então você deve ter um conjunto de dados simples com um grande tamanho de dados.

A razão por trás do uso deste conjunto de dados é que ele é um conjunto de dados simples com um grande tamanho de dados presente neste conjunto de dados..

Vamos ver qual é o tamanho desses dados:

Leia o conjunto de dados

Em primeiro lugar, temos que ler o conjunto de dados de qualidade do vinho usando pandas.

#importando pandas
df = pd.read_csv('wine_quality.csv')
df.head()
87990screenshot202021-04-2920143059-6293808
df.shape()
43508screenshot202021-04-2920143757-7453715

Depois de executar este código, você pode ver que temos 6497 filas e 13 colunas no conjunto de dados de qualidade do vinho.

Agora, verificamos as categorias exclusivas que estão presentes em um qualidade variável,

Unique_points = df['qualidade'].exclusivo()
Unique_points
52301screenshot202021-04-2920144318-7342742

Como vemos, existem 6, 5, 7, 8, 4, 3, 9 pontos de dados únicos na variável de qualidade, onde esses pontos de dados são as medidas de qualidade do vinho.

Variáveis ​​categóricas de Handel

# vars catogerical
next_df = pd.get_dummies(new_df,drop_first = True)
# exibir novo dataframe
next_df
81024screenshot202021-04-2520143427-9124542

Característica dependente e independente

Para aplicar o modelo de aprendizado de máquina, temos que dividir as características dependentes e independentes:

# características independentes
x = next_df.drop(['qualidade','best quality'],eixo = 1)
# característica dependente
y = next_df['best quality']

Treinamento de modelo com núcleos de CPU

Vindo para execução agora, estamos fazendo isso aplicando alguns passos:

Paso 1: Usando o algoritmo de aprendizado de máquina RandomForestClassifier.

Paso 2: Usando RepeatedStratifiedKFold para validação cruzada.

Paso 3: Treine o modelo usando a pontuação de validação cruzada.

Quando inicializamos todas essas coisas, o tempo será calculado com base nesta pontuação de validação cruzada. Antes de verificar a hora, importamos os módulos necessários:

Importação de módulo:

de tempo de tempo de importação
# importando RepeatedStratifiedKFold
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier
de sklearn.model_selection import cross_val_score
# importando RandomForestClassifier

Agora, verificamos o tempo usando os diferentes núcleos da CPU:

Aqui, usamos o algoritmo de aprendizado de máquina RandomForestClassifie, quando você verifica os parâmetros de RandomForestClassifier, você descobre que há um n_jobs parâmetro.

96476screenshot202021-04-2920155143-2952558

n_jobs é o parâmetro que realmente o ajudará a basicamente atribuir quantos núcleos um determinado treino de sistema deve levar.

Por exemplo, se quisermos levar n_jobs = 1 então vai levar 1 Núcleo da CPU, sim pegue 2, vai levar 2 Núcleos de CPU, e assim por diante. Quando você deseja usar todos os núcleos da CPU para treinamento e não sabe quantos núcleos existem no sistema, Apenas use n_jobs = -1.

1 Núcleos de CPU:

## Núcleos de CPU que usamos n_jobs
random = RandomForestClassifier(n_estimators = 100)
# criando objeto de RepeatedStratifiedKFold
cv = RepeatedStratifiedKFold(n_splits = 5, n_repetições = 3, random_state = 4)
# tempo de execução inicial
start_time = time()
n_scores = cross_val_score(aleatória,x,e,score='accurate', cv = cv, n_jobs = 1)
# hora de término da execução
end_time = time()
final_time = end_time-start_time
# mostrar o tempo de execução
imprimir('final execution time is : {}'.format(final_time))
33266screenshot202021-04-2920152121-9489604

Aqui vemos que com 1 núcleo são necessários em torno 10 segundos para correr, e este é um grande momento.

Nós não escrevemos o n_jobs dentro do RandomForestClassifier, em vez de escrevê-lo no cross_val_score porque nos ajuda a fazer validação cruzada usando RepeatedStratifiedKFold

Agora, usamos este mesmo código com uma pequena mudança para mais núcleos:

2 Núcleos de CPU:

## Núcleos de CPU que usamos n_jobs
random = RandomForestClassifier(n_estimators = 100)
# criando objeto de RepeatedStratifiedKFold
cv = RepeatedStratifiedKFold(n_splits = 5, n_repetições = 3, random_state = 4)
# tempo de execução inicial
start_time = time()
n_scores = cross_val_score(aleatória,x,e,score='accurate', cv = cv, n_jobs = 2) # 2 núcleos
# hora de término da execução
end_time = time()
final_time = end_time-start_time
# mostrar o tempo de execução
imprimir('final execution time is : {}'.format(final_time))
65558screenshot202021-04-2920160956-9156826

sim, aqui você pode ver qual é a diferença entre 1 núcleo e 2 núcleos, o tempo de execução é muito diferente de 1 núcleo.

3 Núcleos de CPU:

## Núcleos de CPU que usamos n_jobs
random = RandomForestClassifier(n_estimators = 100)
# criando objeto de RepeatedStratifiedKFold
cv = RepeatedStratifiedKFold(n_splits = 5, n_repetições = 3, random_state = 4)
# tempo de execução inicial
start_time = time()
n_scores = cross_val_score(aleatória,x,e,score='accurate', cv = cv, n_jobs = 3)   # 3 núcleos
# hora de término da execução
end_time = time()
final_time = end_time-start_time
# mostrar o tempo de execução
imprimir('final execution time is : {}'.format(final_time))
31028screenshot202021-04-2920161326-7219513

Pegue todos os núcleos:

## Núcleos de CPU que usamos n_jobs
random = RandomForestClassifier(n_estimators = 100)
# criando objeto de RepeatedStratifiedKFold
cv = RepeatedStratifiedKFold(n_splits = 5, n_repetições = 3, random_state = 4)
# tempo de execução inicial
start_time = time()
n_scores = cross_val_score(aleatória,x,e,score='accurate', cv = cv, n_jobs = -1) # todos os núcleos
# hora de término da execução
end_time = time()
final_time = end_time-start_time
# mostrar o tempo de execução
imprimir('final execution time is : {}'.format(final_time))
48775screenshot202021-04-2920161839-5422602

Comparação de tempo de núcleo:

## Núcleos de CPU que usamos n_jobs
para núcleo em [1,2,3,4,5,6,7,8,9,10]:
    random = RandomForestClassifier(n_estimators = 100)
    # criando objeto de RepeatedStratifiedKFold
    cv = RepeatedStratifiedKFold(n_splits = 5, n_repetições = 3, random_state = 4)
    # tempo de execução inicial
    start_time = time()
    n_scores = cross_val_score(aleatória,x,e,score='accurate', cv = cv, n_jobs = core)
    # hora de término da execução
    end_time = time()
    final_time = end_time-start_time
    # mostrar o tempo de execução
    imprimir('final execution time of core {} é : {}'.format(essencial,final_time))
21077screenshot202021-04-2920162514-7769768

Você pode ver que há uma grande diferença quando usamos 1 núcleo para treinar nosso modelo de ML e 10 núcleos para treinar o modelo de ML.

Notas finais

Olá, neste artigo, você aprendeu o treinamento de modelos de ML usando núcleos de CPU, agora é a hora de implementar essa técnica em seu modelo de aprendizado de máquina para reduzir o tempo de execução.

Espero que você goste deste artigo., Compartilhe com seus amigos.

Você pode se conectar comigo no LinkedIn: www.linkedin.com/in/mayur-badole-189221199

Confira meus outros artigos: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Obrigado.

A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.

Datapeaker