Only 40% of CPU usage with Ray / modin.pandas

41 Views Asked by At

I am manipulating some data from dataframes(650MB) so I am using parallel processing in python. The problem is that I thought that it would require CPU usage of around 80-90% but it is requiring only 40%, sometimes not even that. It is taking almost 4 hours to have the results. My computer configuration is: Processor Intel 13700 Memory: 32GB Windows 11 Nvidia Geforce RTX 3060

What am I doing wrong? Following I present the code:

import modin.pandas as pd
import warnings
from time import sleep
import ray
import psutil


ray.init(num_cpus=24)
p=psutil.Process()
p.cpu_affinity([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])


RAY_DEDUP_LOGS=0
warnings.filterwarnings('ignore')
df_energia = pd.read_csv('UCBT.csv')
df_curva = pd.read_csv('CRVCRG.csv')
df_dias=pd.DataFrame(columns=['TIP_DIA','Mês'])

Janeiro=[ 'DO', 'DO', 'DU', 'DU', 'DU', 'DU', 'DU', 'SA', 'DO', 'DU', 'DU', 'DU', 'DU', 'DU', 'SA', 'DO', 'DU', 'DU', 'DU', 'DU', 'DU', 'SA', 'DO', 'DU', 'DU', 'DU', 'DU', 'DU', 'SA', 'DO', 'DU']
TipodeCarga=['RES-TIPO1',  'RES-TIPO2',  'RES-TIPO3',  'RES-TIPO4',  'RES-TIPO5',  'RES-TIPO6',  'RES-TIPO7',  'RES-TIPO8',  'RES-TIPO9',  'RES-TIPO10',  'COM-TIPO1' ,  'COM-TIPO2' ,  'COM-TIPO3' ,  'COM-TIPO4' ,  'COM-TIPO5' ,  'COM-TIPO6' ,  'COM-TIPO7' ,  'COM-TIPO8' ,  'COM-TIPO9' ,  'COM-TIPO10',  'IND-TIPO1' ,  'IND-TIPO2' ,  'IND-TIPO3' ,  'IND-TIPO4' ,  'IND-TIPO5' ,  'IND-TIPO6' ,  'IND-TIPO7' ,  'IND-TIPO8' ,  'IND-TIPO9' ,  'IND-TIPO10']
Arquivo_csv=['demandaanual_RES-TIPO1.csv', 'demandaanual_RES-TIPO2.csv', 'demandaanual_RES-TIPO3.csv', 'demandaanual_RES-TIPO4.csv', 'demandaanual_RES-TIPO5.csv', 'demandaanual_RES-TIPO6.csv', 'demandaanual_RES-TIPO7.csv', 'demandaanual_RES-TIPO8.csv', 'demandaanual_RES-TIPO9.csv', 'demandaanual_RES-TIPO10.csv', 'demandaanual_COM-TIPO1.csv', 'demandaanual_COM-TIPO2.csv', 'demandaanual_COM-TIPO3.csv', 'demandaanual_COM-TIPO4.csv', 'demandaanual_COM-TIPO5.csv', 'demandaanual_COM-TIPO6.csv', 'demandaanual_COM-TIPO7.csv', 'demandaanual_COM-TIPO8.csv', 'demandaanual_COM-TIPO9.csv', 'demandaanual_COM-TIPO10.csv', 'demandaanual_IND-TIPO1.csv', 'demandaanual_IND-TIPO2.csv', 'demandaanual_IND-TIPO3.csv', 'demandaanual_IND-TIPO4.csv', 'demandaanual_IND-TIPO5.csv', 'demandaanual_IND-TIPO6.csv', 'demandaanual_IND-TIPO7.csv', 'demandaanual_IND-TIPO8.csv', 'demandaanual_IND-TIPO9.csv', 'demandaanual_IND-TIPO10.csv']
Arquivo_csv_janeiro=['demandaJaneiro_RES-TIPO1.csv', 'demandaJaneiro_RES-TIPO2.csv', 'demandaJaneiro_RES-TIPO3.csv', 'demandaJaneiro_RES-TIPO4.csv', 'demandaJaneiro_RES-TIPO5.csv', 'demandaJaneiro_RES-TIPO6.csv', 'demandaJaneiro_RES-TIPO7.csv', 'demandaJaneiro_RES-TIPO8.csv', 'demandaJaneiro_RES-TIPO9.csv', 'demandaJaneiro_RES-TIPO10.csv', 'demandaJaneiro_COM-TIPO1.csv', 'demandaJaneiro_COM-TIPO2.csv', 'demandaJaneiro_COM-TIPO3.csv', 'demandaJaneiro_COM-TIPO4.csv', 'demandaJaneiro_COM-TIPO5.csv', 'demandaJaneiro_COM-TIPO6.csv', 'demandaJaneiro_COM-TIPO7.csv', 'demandaJaneiro_COM-TIPO8.csv', 'demandaJaneiro_COM-TIPO9.csv', 'demandaJaneiro_COM-TIPO10.csv', 'demandaJaneiro_IND-TIPO1.csv', 'demandaJaneiro_IND-TIPO2.csv', 'demandaJaneiro_IND-TIPO3.csv', 'demandaJaneiro_IND-TIPO4.csv', 'demandaJaneiro_IND-TIPO5.csv', 'demandaJaneiro_IND-TIPO6.csv', 'demandaJaneiro_IND-TIPO7.csv', 'demandaJaneiro_IND-TIPO8.csv', 'demandaJaneiro_IND-TIPO9.csv', 'demandaJaneiro_IND-TIPO10.csv']


df_mes=pd.DataFrame(Janeiro,columns=['TIP_DIA'])
df_mes['Mês']='Janeiro'
df_dias_janeiro=pd.concat([df_dias,df_mes])


list_POT=['POT_01',  'POT_02',  'POT_03',  'POT_04',  'POT_05',  'POT_06',  'POT_07',  'POT_08',  'POT_09',  'POT_10',  'POT_11',  'POT_12',  'POT_13',  'POT_14',  'POT_15',  'POT_16',  'POT_17',  'POT_18',  'POT_19',  'POT_20',  'POT_21',  'POT_22',  'POT_23',  'POT_24',  'POT_25',  'POT_26',  'POT_27',  'POT_28',  'POT_29',  'POT_30',  'POT_31',  'POT_32',  'POT_33',  'POT_34',  'POT_35',  'POT_36',  'POT_37',  'POT_38',  'POT_39',  'POT_40',  'POT_41',  'POT_42',  'POT_43',  'POT_44',  'POT_45',  'POT_46',  'POT_47',  'POT_48',  'POT_49',  'POT_50',  'POT_51',  'POT_52',  'POT_53',  'POT_54',  'POT_55',  'POT_56',  'POT_57',  'POT_58',  'POT_59',  'POT_60',  'POT_61',  'POT_62',  'POT_63',  'POT_64',  'POT_65',  'POT_66',  'POT_67',  'POT_68',  'POT_69',  'POT_70',  'POT_71',  'POT_72',  'POT_73',  'POT_74',  'POT_75',  'POT_76',  'POT_77',  'POT_78',  'POT_79',  'POT_80',  'POT_81',  'POT_82',  'POT_83',  'POT_84',  'POT_85',  'POT_86',  'POT_87',  'POT_88',  'POT_89',  'POT_90',  'POT_91',  'POT_92',  'POT_93',  'POT_94',  'POT_95',  'POT_96']

for i in range(len(TipodeCarga)):
    df_curva_res=df_curva.loc[df_curva['COD_ID']==TipodeCarga[i]]
    col=df_curva_res.loc[:,'POT_01':'POT_96']
    df_curva_res['Media']=col.mean(axis=1)
    df_curva_res_mean=df_curva_res
    df_curva_res_mean[list_POT]=df_curva_res_mean[list_POT].div(df_curva_res.Media,axis=0)
    df_demanda_maio = pd.merge(df_curva_res, df_dias_maio, how="right", on="TIP_DIA")
    df_demanda_maio_simples = df_demanda_maio[list_POT]
    df_demanda_maio_stack = df_demanda_maio_simples.stack()
    df_demanda_maio_linha=df_demanda_maio_stack.T

    df_energia_tipodecarga = df_energia.loc[df_energia['TIP_CC'] == TipodeCarga[i]]
    df_energia_tipodecarga_maio = df_energia_tipodecarga.loc[:, 'ENE_05'] / (24 * 30)
    df_energia_tipodecarga_mai_coluna = df_energia_tipodecarga_maio.transpose()
    df_energia_tipodecarga_mai_coluna1 = df_energia_tipodecarga_mai_coluna.tolist()

    Cargas_maio=pd.DataFrame()
    for j in range(len(df_energia_tipodecarga_maio)):
        Cargas_maio[i]=df_demanda_maio_linha.mul(df_energia_tipodecarga_maio.iloc[j],axis=0)
    df_energia_tipodecarga_indicerefeito=df_energia_tipodecarga.reset_index()
    df_allcolums_UCBT_mais_carga = df_energia_tipodecarga_indicerefeito.join(Cargas_maio.droplevel(0).T)
    df_allcolums_UCBT_mais_carga.to_csv(Arquivo_csv_maio[i])

This is my first question here so if you need more information please just tell me. The code is running but I think it can run faster with a higher usage of the CPU.

0

There are 0 best solutions below