antoinecarme / pyaf

PyAF is an Open Source Python library for Automatic Time Series Forecasting built on top of popular pydata modules.
BSD 3-Clause "New" or "Revised" License
456 stars 73 forks source link

RISC-V Hardware Platform Validation #208

Closed antoinecarme closed 1 year ago

antoinecarme commented 1 year ago

New Hardware Architecture : RISC-V

This is a very experimental platform. PyAF intends to work on a not-yet-fully-manufactured hardware (#176 ).

The Sifive dev board (VisionFive 2) is planned through a kickstart project :

https://www.kickstarter.com/projects/starfive/visionfive-2/

Availablity : Dec. 2022

CPU features :

image

antoinecarme commented 1 year ago

Hardware info


antoine@pyafriscv:~/dev/python/packages/timeseries/pyaf$ cat /etc/debian_version 
bookworm/sid

antoine@pyafriscv:~$ cat /proc/cpuinfo 
processor   : 0
hart        : 1
isa     : rv64imafdc
mmu     : sv39
uarch       : sifive,u74-mc

processor   : 1
hart        : 2
isa     : rv64imafdc
mmu     : sv39
uarch       : sifive,u74-mc

processor   : 2
hart        : 3
isa     : rv64imafdc
mmu     : sv39
uarch       : sifive,u74-mc

processor   : 3
hart        : 4
isa     : rv64imafdc
mmu     : sv39
uarch       : sifive,u74-mc
antoinecarme commented 1 year ago

Memory

antoine@pyafriscv:~$ free
               total        used        free      shared  buff/cache   available
Mem:         8118100      203444     7855340        3172      139944     7914656
Swap:              0           0           0
antoinecarme commented 1 year ago

dmesg

[    0.000000] Linux version 5.15.0-starfive (sw_buildbot@mdcsw02) (riscv64-unknown-linux-gnu-gcc (GCC) 10.2.0, GNU ld (GNU Binutils) 2.35) #1 SMP Wed Dec 21 0
3:56:12 EST 2022
[    0.000000] OF: fdt: Ignoring memory range 0x40000000 - 0x40200000
[    0.000000] Machine model: StarFive VisionFive V2
[    0.000000] earlycon: uart0 at MMIO32 0x0000000010000000 (options '115200')
[    0.000000] printk: bootconsole [uart0] enabled
[    0.000000] efi: UEFI not found.
[    0.000000] Reserved memory: created CMA memory pool at 0x0000000080000000, size 512 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000040200000-0x00000000ffffffff]
[    0.000000]   Normal   [mem 0x0000000100000000-0x000000023fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000040200000-0x00000000c010ffff]
[    0.000000]   node   0: [mem 0x00000000c0110000-0x00000000c01fffff]
[    0.000000]   node   0: [mem 0x00000000c0200000-0x000000023fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000040200000-0x000000023fffffff]
[    0.000000] SBI specification v0.3 detected
[    0.000000] SBI implementation ID=0x1 Version=0x10000
[    0.000000] SBI TIME extension detected
[    0.000000] SBI IPI extension detected
[    0.000000] SBI RFENCE extension detected
[    0.000000] SBI v0.2 HSM extension detected
[    0.000000] CPU with hartid=0 is not available
[    0.000000] CPU with hartid=0 is not available
[    0.000000] riscv: ISA extensions acdfim
[    0.000000] riscv: ELF capabilities acdfim
[    0.000000] percpu: Embedded 17 pages/cpu s31528 r8192 d29912 u69632
[    0.000000] pcpu-alloc: s31528 r8192 d29912 u69632 alloc=17*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 2067975
[    0.000000] Kernel command line: root=/dev/mmcblk1p3 root=/dev/mmcblk1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selin
ux=0
[    0.000000] Unknown command line parameters: stmmaceth=chain_mode:1 selinux=0
[    0.000000] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)
[    0.000000] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] software IO TLB: mapped [mem 0x00000000fbfff000-0x00000000fffff000] (64MB)
[    0.000000] Memory: 7582168K/8386560K available (9884K kernel code, 4982K rwdata, 4096K rodata, 2191K init, 401K bss, 280104K reserved, 524288K cma-reserved
)
antoinecarme commented 1 year ago

No error when running pyaf build tests

antoine@pyafriscv:~/dev/python/packages/timeseries/pyaf$ make -f tests/Makefile -j 4 build-test &> log.build &

antoine@pyafriscv:~/dev/python/packages/timeseries/pyaf$ grep Error log.build  
timeout 480 python3  tests/basic_checks/test_temporal_demo_hourly_D_H_ErrorMessage_3.py  >  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage_3.log  2>&1
timeout 480 python3  tests/basic_checks/test_temporal_demo_hourly_D_H_ErrorMessage_2.py  >  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage_2.log  2>&1
timeout 480 python3  tests/basic_checks/test_temporal_demo_hourly_D_H_ErrorMessage.py  >  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage.log  2>&1
timeout 480 python3 scripts/num_diff.py  tests/references/basic_checks/test_temporal_demo_hourly_D_H_ErrorMessage_2.log logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage_2.log  >  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage_2.log.diff
timeout 480 python3 scripts/num_diff.py  tests/references/basic_checks/test_temporal_demo_hourly_D_H_ErrorMessage_3.log logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage_3.log  >  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage_3.log.diff
timeout 480 python3 scripts/num_diff.py  tests/references/basic_checks/test_temporal_demo_hourly_D_H_ErrorMessage.log logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage.log  >  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage.log.diff
tail -10  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage_2.log.diff 
tail -10  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage.log.diff 
tail -10  logs/basic_checks_test_temporal_demo_hourly_D_H_ErrorMessage_3.log.diff 
antoinecarme commented 1 year ago

Pytorch debian packages for riscv are buggy for the moment.

Update : Pytorch is now working. See below

antoinecarme commented 1 year ago

lshw

root@pyafriscv:~# lshw
pyafriscv                   
    description: Computer
    product: StarFive VisionFive V2
    serial: VF7110A1-2247-D008E000-00000216
    width: 64 bits
    capabilities: smp
  *-core
       description: Motherboard
       physical id: 0
     *-cpu:0
          description: CPU
          product: cpu
          physical id: 1
          bus info: cpu@0
          size: 1500MHz
          capacity: 1500MHz
          width: 32 bits
          capabilities: cpufreq
        *-cache
             description: L1 Cache
             physical id: 0
             size: 8KiB
     *-cpu:1
          description: CPU
          product: cpu
          physical id: 2
          bus info: cpu@1
          size: 1500MHz
          capacity: 1500MHz
          width: 32 bits
          capabilities: cpufreq
        *-cache
             description: L1 Cache
             physical id: 0
             size: 32KiB
     *-cpu:2
          description: CPU
          product: cpu
          physical id: 3
          bus info: cpu@2
          size: 1500MHz
          capacity: 1500MHz
          width: 32 bits
          capabilities: cpufreq
        *-cache
             description: L1 Cache
             physical id: 0
             size: 32KiB
     *-cpu:3
          description: CPU
          product: cpu
          physical id: 4
          bus info: cpu@3
          size: 1500MHz
          capacity: 1500MHz
          width: 32 bits
          capabilities: cpufreq
        *-cache
             description: L1 Cache
             physical id: 0
             size: 32KiB
     *-cpu:4 DISABLED
          description: CPU
          product: cpu
          physical id: 5
          bus info: cpu@4
        *-cache
             description: L1 Cache
             physical id: 0
             size: 32KiB
     *-memory
          description: System memory
          physical id: 6
          size: 7927MiB
     *-pci
          description: PCI bridge
          product: XpressRich-AXI Ref Design
          vendor: PLDA
          physical id: 0
          bus info: pci@0000:00:00.0
          version: 02
          width: 64 bits
          clock: 33MHz
          capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
          resources: memory:30000000-300fffff
antoinecarme commented 1 year ago

Pytorch debian packages : some dependencies are failing. workaround OK.

root@pyafriscv:~# dpkg -i --ignore-depends=python3  python3-skorch_0.9.0-3_all.deb python3-torch_1.12.1-1+b1_riscv64.deb
(Reading database ... 160617 files and directories currently installed.)
Preparing to unpack python3-skorch_0.9.0-3_all.deb ...
Unpacking python3-skorch (0.9.0-3) over (0.9.0-3) ...
Preparing to unpack python3-torch_1.12.1-1+b1_riscv64.deb ...
Unpacking python3-torch (1.12.1-1+b1) over (1.12.1-1+b1) ...
Setting up python3-torch (1.12.1-1+b1) ...
Setting up python3-skorch (0.9.0-3) ...
antoinecarme commented 1 year ago

Sample pytorch test script

antoine@pyafriscv:~/dev/python/packages/timeseries/pyaf$ python3 tests/pytorch/test_ozone_exogenous_MLPX_pytorch.py 
BUILD_PYTORCH_OR_KERAS_MODEL ('MLP', ('PyTorch',))
      Date  Exog2 Exog3 Exog4  Ozone       Time
0  1955-01      1    AQ   P_R    2.7 1955-01-01
1  1955-02      2    AR   P_R    2.0 1955-02-01
2  1955-03      3    AS   P_S    3.6 1955-03-01
3  1955-04      4    AT   P_U    5.0 1955-04-01
4  1955-05      5    AU   P_V    6.5 1955-05-01
/home/antoine/dev/python/packages/timeseries/pyaf/tests/pytorch/test_ozone_exogenous_gen.py:18: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  df[lSignal] = df[b1.mSignalVar]
INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone_MLP_PyTorch'], 'Transformations': [('Ozone_MLP_PyTorch', 'None', '_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'Diff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'RelDiff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4}))
INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone_MLP_PyTorch', 'Transformation': '_Ozone_MLP_PyTorch'}))
INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone_MLP_PyTorch', 'Transformation': 'Diff_Ozone_MLP_PyTorch'}))
INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone_MLP_PyTorch', 'Transformation': 'RelDiff_Ozone_MLP_PyTorch'}))
INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone_MLP_PyTorch', 'Transformation': 'CumSum_Ozone_MLP_PyTorch'}))
Error in cpuinfo: processor architecture is not supported in cpuinfo
Error in cpuinfo: processor architecture is not supported in cpuinfo
Error in cpuinfo: processor architecture is not supported in cpuinfo
Error in cpuinfo: processor architecture is not supported in cpuinfo
/usr/lib/python3/dist-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils.
  warnings.warn("Setuptools is replacing distutils.")
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 37.613, ('TRAINING', {'Signal': 'Ozone_MLP_PyTorch', 'Transformation': 'CumSum_Ozone_MLP_PyTorch'}))
/usr/lib/python3/dist-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils.
  warnings.warn("Setuptools is replacing distutils.")
/usr/lib/python3/dist-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils.
  warnings.warn("Setuptools is replacing distutils.")
/usr/lib/python3/dist-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils.
  warnings.warn("Setuptools is replacing distutils.")
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 40.86, ('TRAINING', {'Signal': 'Ozone_MLP_PyTorch', 'Transformation': '_Ozone_MLP_PyTorch'}))
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 42.627, ('TRAINING', {'Signal': 'Ozone_MLP_PyTorch', 'Transformation': 'RelDiff_Ozone_MLP_PyTorch'}))
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 43.642, ('TRAINING', {'Signal': 'Ozone_MLP_PyTorch', 'Transformation': 'Diff_Ozone_MLP_PyTorch'}))
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 75.981, ('SIGNAL_TRAINING', {'Signals': ['Ozone_MLP_PyTorch'], 'Transformations': [('Ozone_MLP_PyTorch', 'None', '_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'Diff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'RelDiff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4}))
INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone_MLP_PyTorch'], 'Transformations': [('Ozone_MLP_PyTorch', [('Ozone_MLP_PyTorch', 'None', 'CumSum_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'Diff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'RelDiff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', '_', 'T+S+R')])], 'Cores': 1}))
INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone_MLP_PyTorch', 'Transformations': [('Ozone_MLP_PyTorch', 'None', 'CumSum_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'Diff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'RelDiff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', '_', 'T+S+R')]}))
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.023, ('MODEL_SELECTION', {'Signal': 'Ozone_MLP_PyTorch', 'Transformations': [('Ozone_MLP_PyTorch', 'None', 'CumSum_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'Diff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'RelDiff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', '_', 'T+S+R')]}))
INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone_MLP_PyTorch', 'Model': '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE_residue_MLP(51)'}))
Error in cpuinfo: processor architecture is not supported in cpuinfo
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.171, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone_MLP_PyTorch', 'Model': '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE_residue_MLP(51)'}))
INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone_MLP_PyTorch'}))
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.887, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone_MLP_PyTorch'}))
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.083, ('FINALIZE_TRAINING', {'Signals': ['Ozone_MLP_PyTorch'], 'Transformations': [('Ozone_MLP_PyTorch', [('Ozone_MLP_PyTorch', 'None', 'CumSum_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'Diff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', 'RelDiff_', 'T+S+R'), ('Ozone_MLP_PyTorch', 'None', '_', 'T+S+R')])], 'Cores': 1}))
INFO:pyaf.std:TIME_DETAIL TimeVariable='Time' TimeMin=1955-01-01T00:00:00.000000 TimeMax=1967-09-01T00:00:00.000000 TimeDelta=<DateOffset: months=1> Horizon=12
INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone_MLP_PyTorch' Length=204  Min=1.2 Max=8.7  Mean=3.835784 StdDev=1.491559
INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='_Ozone_MLP_PyTorch' Min=0.0 Max=1.0  Mean=0.351438 StdDev=0.198875
INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R'
INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE '_'
INFO:pyaf.std:BEST_DECOMPOSITION  '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE_residue_MLP(51)' [LinearTrend + Cycle_None + MLP(51)]
INFO:pyaf.std:TREND_DETAIL '_Ozone_MLP_PyTorch_LinearTrend' [LinearTrend]
INFO:pyaf.std:CYCLE_DETAIL '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE' [Cycle_None]
INFO:pyaf.std:AUTOREG_DETAIL '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE_residue_MLP(51)' [MLP(51)]
INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.1993 MAPE_Forecast=0.1773 MAPE_Test=0.1195
INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.1873 SMAPE_Forecast=0.1952 SMAPE_Test=0.1213
INFO:pyaf.std:MODEL_MASE MASE_Fit=0.8579 MASE_Forecast=0.7459 MASE_Test=0.5919
INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.3031 CRPS_Forecast=0.275 CRPS_Test=0.2646
INFO:pyaf.std:MODEL_L1 L1_Fit=0.754 L1_Forecast=0.5791 L1_Test=0.2798
INFO:pyaf.std:MODEL_L2 L2_Fit=1.0038 L2_Forecast=0.7291 L2_Test=0.332
INFO:pyaf.std:MODEL_LnQ LnQ_Fit=8.9229 LnQ_Forecast=2.1536 LnQ_Test=0.2502
INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.563 MedAE_Forecast=0.5528 MedAE_Test=0.323
INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.57 KENDALL_TAU_Forecast=0.689 KENDALL_TAU_Test=0.7786
INFO:pyaf.std:MODEL_KOLOMOGOROV_SMIRNOV KS_Fit=0.1373 KS_Forecast=0.2051 KS_Test=0.1667
INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11452.0 MWU_Forecast=904.0 MWU_Test=72.0
INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.5943 AUC_Test=0.5
INFO:pyaf.std:MODEL_COMPLEXITY 52.0
INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START
INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES NoTransf None
INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_END
INFO:pyaf.std:TREND_DETAIL_START
INFO:pyaf.std:LINEAR_RIDGE_TREND LinearTrend (0.509677, array([-0.243617]))
INFO:pyaf.std:TREND_DETAIL_END
INFO:pyaf.std:CYCLE_MODEL_DETAIL_START
INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES _Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE None 0.001729 {}
INFO:pyaf.std:CYCLE_MODEL_DETAIL_END
INFO:pyaf.std:AR_MODEL_DETAIL_START
INFO:pyaf.std:MODEL_TYPE PYTORCH
INFO:pyaf.std:PYTORCH_MODEL_ARCHITECTURE [Sequential(
  (0): Linear(in_features=51, out_features=51, bias=True)
  (1): Dropout(p=0.5, inplace=False)
  (2): Linear(in_features=51, out_features=1, bias=True)
)]
INFO:pyaf.std:AR_MODEL_DETAIL_END
INFO:pyaf.timing:('OPERATION_START', ('PLOTTING', {'Signals': ['Ozone_MLP_PyTorch']}))
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 21.87, ('PLOTTING', {'Signals': ['Ozone_MLP_PyTorch']}))
INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone_MLP_PyTorch'], 'Horizon': 12}))
INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.294, ('FORECASTING', {'Signals': ['Ozone_MLP_PyTorch'], 'Horizon': 12}))
Forecast Columns  Index(['Time', 'Ozone_MLP_PyTorch', 'row_number', 'Time_Normalized',
       '_Ozone_MLP_PyTorch', '_Ozone_MLP_PyTorch_LinearTrend',
       '_Ozone_MLP_PyTorch_LinearTrend_residue',
       '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE',
       '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE_residue',
       '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE_residue_MLP(51)',
       '_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE_residue_MLP(51)_residue',
       '_Ozone_MLP_PyTorch_Trend', '_Ozone_MLP_PyTorch_Trend_residue',
       '_Ozone_MLP_PyTorch_Cycle', '_Ozone_MLP_PyTorch_Cycle_residue',
       '_Ozone_MLP_PyTorch_AR', '_Ozone_MLP_PyTorch_AR_residue',
       '_Ozone_MLP_PyTorch_TransformedForecast', 'Ozone_MLP_PyTorch_Forecast',
       '_Ozone_MLP_PyTorch_TransformedResidue', 'Ozone_MLP_PyTorch_Residue',
       'Ozone_MLP_PyTorch_Forecast_Lower_Bound',
       'Ozone_MLP_PyTorch_Forecast_Upper_Bound',
       'Ozone_MLP_PyTorch_Forecast_Quantile_2',
       'Ozone_MLP_PyTorch_Forecast_Quantile_18',
       'Ozone_MLP_PyTorch_Forecast_Quantile_34',
       'Ozone_MLP_PyTorch_Forecast_Quantile_50',
       'Ozone_MLP_PyTorch_Forecast_Quantile_66',
       'Ozone_MLP_PyTorch_Forecast_Quantile_82',
       'Ozone_MLP_PyTorch_Forecast_Quantile_98'],
      dtype='object')
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 216 entries, 0 to 215
Data columns (total 3 columns):
 #   Column                      Non-Null Count  Dtype         
---  ------                      --------------  -----         
 0   Time                        216 non-null    datetime64[ns]
 1   Ozone_MLP_PyTorch           204 non-null    float64       
 2   Ozone_MLP_PyTorch_Forecast  216 non-null    float64       
dtypes: datetime64[ns](1), float64(2)
memory usage: 5.2 KB
None
Forecasts
 [[Timestamp('1972-01-01 00:00:00') nan 1.2916813451499498]
 [Timestamp('1972-02-01 00:00:00') nan 1.3036175143260458]
 [Timestamp('1972-03-01 00:00:00') nan 2.0932444300494533]
 [Timestamp('1972-04-01 00:00:00') nan 2.3220307719538495]
 [Timestamp('1972-05-01 00:00:00') nan 2.8684464710553965]
 [Timestamp('1972-06-01 00:00:00') nan 3.068573912549856]
 [Timestamp('1972-07-01 00:00:00') nan 3.4476306376565518]
 [Timestamp('1972-08-01 00:00:00') nan 3.354936068335868]
 [Timestamp('1972-09-01 00:00:00') nan 2.9885381622994855]
 [Timestamp('1972-10-01 00:00:00') nan 1.9906627171641105]
 [Timestamp('1972-11-01 00:00:00') nan 1.5361829669767078]
 [Timestamp('1972-12-01 00:00:00') nan 1.3309359367702456]]

<ModelInfo>
{
    "Ozone_MLP_PyTorch": {
        "Dataset": {
            "Signal": "Ozone_MLP_PyTorch",
            "Time": {
                "Horizon": 12,
                "TimeMinMax": [
                    "1955-01-01 00:00:00",
                    "1971-12-01 00:00:00"
                ],
                "TimeVariable": "Time"
            },
            "Training_Signal_Length": 204
        },
        "Model": {
            "AR_Model": "MLP(51)",
            "Best_Decomposition": "_Ozone_MLP_PyTorch_LinearTrend_residue_bestCycle_byMAPE_residue_MLP(51)",
            "Cycle": "Cycle_None",
            "Signal_Decomposition_Type": "T+S+R",
            "Signal_Transoformation": "NoTransf",
            "Trend": "LinearTrend"
        },
        "Model_Performance": {
            "AUC": 0.5943,
            "COMPLEXITY": 52.0,
            "CRPS": 0.275,
            "KS": 0.2051,
            "KendallTau": 0.689,
            "LnQ": 2.1536,
            "MAE": 0.5791,
            "MAPE": 0.1773,
            "MASE": 0.7459,
            "MannWhitneyU": 904.0,
            "MedAE": 0.5528,
            "RMSE": 0.7291
        }
    }
}
</ModelInfo>

<Forecast>
{"Time":{"192":"1971-01-01T00:00:00.000Z","193":"1971-02-01T00:00:00.000Z","194":"1971-03-01T00:00:00.000Z","195":"1971-04-01T00:00:00.000Z","196":"1971-05-01T00:00:00.000Z","197":"1971-06-01T00:00:00.000Z","198":"1971-07-01T00:00:00.000Z","199":"1971-08-01T00:00:00.000Z","200":"1971-09-01T00:00:00.000Z","201":"1971-10-01T00:00:00.000Z","202":"1971-11-01T00:00:00.000Z","203":"1971-12-01T00:00:00.000Z","204":"1972-01-01T00:00:00.000Z","205":"1972-02-01T00:00:00.000Z","206":"1972-03-01T00:00:00.000Z","207":"1972-04-01T00:00:00.000Z","208":"1972-05-01T00:00:00.000Z","209":"1972-06-01T00:00:00.000Z","210":"1972-07-01T00:00:00.000Z","211":"1972-08-01T00:00:00.000Z","212":"1972-09-01T00:00:00.000Z","213":"1972-10-01T00:00:00.000Z","214":"1972-11-01T00:00:00.000Z","215":"1972-12-01T00:00:00.000Z"},"Ozone_MLP_PyTorch":{"192":1.8,"193":2.0,"194":2.2,"195":3.0,"196":2.4,"197":3.5,"198":3.5,"199":3.3,"200":2.7,"201":2.5,"202":1.6,"203":1.2,"204":null,"205":null,"206":null,"207":null,"208":null,"209":null,"210":null,"211":null,"212":null,"213":null,"214":null,"215":null},"Ozone_MLP_PyTorch_Forecast":{"192":1.4318199152,"193":1.5857563647,"194":2.1459375522,"195":2.3934606329,"196":2.817499917,"197":3.4724813225,"198":3.8823147756,"199":3.7172879582,"200":2.9777292876,"201":2.5154260858,"202":1.8127896079,"203":1.3639080892,"204":1.2916813451,"205":1.3036175143,"206":2.09324443,"207":2.322030772,"208":2.8684464711,"209":3.0685739125,"210":3.4476306377,"211":3.3549360683,"212":2.9885381623,"213":1.9906627172,"214":1.536182967,"215":1.3309359368}}
</Forecast>
antoinecarme commented 1 year ago

Riscv specific messages

Error in cpuinfo: processor architecture is not supported in cpuinfo
Error in cpuinfo: processor architecture is not supported in cpuinfo
Error in cpuinfo: processor architecture is not supported in cpuinfo
Error in cpuinfo: processor architecture is not supported in cpuinfo
antoinecarme commented 1 year ago

image

antoinecarme commented 1 year ago

cpu frequencies

root@pyafriscv:~/visionfive2-data# cpupower frequency-info               
analyzing CPU 0:
  driver: starfive-cpufreq
  CPUs which run at the same hardware frequency: 0 1 2 3
  CPUs which need to have their frequency coordinated by software: 0 1 2 3
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 375 MHz - 1.50 GHz
  available frequency steps:  375 MHz, 500 MHz, 750 MHz, 1.50 GHz
  available cpufreq governors: conservative ondemand userspace powersave performance schedutil
  current policy: frequency should be within 375 MHz and 1.50 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency: 375 MHz (asserted by call to hardware)
antoinecarme commented 1 year ago

Fixed

antoinecarme commented 1 year ago

https://github.com/antoinecarme/visionfive2_data