Giter VIP home page Giter VIP logo

Comments (13)

HIT-cwh avatar HIT-cwh commented on August 18, 2024

Thanks for your issue. Could you upload more detailed information, such as your config files?

from mmrazor.

Zhiweihhh avatar Zhiweihhh commented on August 18, 2024
_base_ = [
    './imagenet_bs256_autoslim.py',
    './imagenet_bs2048_autoslim.py',
    './mmcls_runtime.py'
]

model = dict(
    type='mmcls.ImageClassifier',
    backbone=dict(type='MobileNetV2', widen_factor=1.5),
    neck=dict(type='GlobalAveragePooling'),
    head=dict(
        type='LinearClsHead',
        num_classes=2,
        in_channels=1920,
        loss=dict(
            type='LabelSmoothLoss',
            mode='original',
            label_smooth_val=0.1,
            loss_weight=1.0),
        topk=(1,),
    ))

algorithm = dict(
    type='AutoSlim',
    architecture=dict(type='MMClsArchitecture', model=model),
    distiller=dict(
        type='SelfDistiller',
        components=[
            dict(
                student_module='head.fc',
                teacher_module='head.fc',
                losses=[
                    dict(
                        type='KLDivergence',
                        name='loss_kd',
                        tau=1,
                        loss_weight=1,
                    )
                ]),
        ]),
    pruner=dict(
        type='RatioPruner',
        ratios=(2 / 12, 3 / 12, 4 / 12, 5 / 12, 6 / 12, 7 / 12, 8 / 12, 9 / 12,
                10 / 12, 11 / 12, 1.0)),
    retraining=False,
    bn_training_mode=True,
    input_shape=None)

runner = dict(type='EpochBasedRunner', max_epochs=50)

use_ddp_wrapper = True

from mmrazor.

HIT-cwh avatar HIT-cwh commented on August 18, 2024

Is there an error when running the following code?

from mmcv import ConfigDict
from mmrazor.models import build_algorithm

model_cfg = dict(
    type='mmcls.ImageClassifier',
    backbone=dict(type='MobileNetV2', widen_factor=1.5),
    neck=dict(type='GlobalAveragePooling'),
    head=dict(
        type='LinearClsHead',
        num_classes=2,
        in_channels=1920,
        loss=dict(
            type='LabelSmoothLoss',
            mode='original',
            label_smooth_val=0.1,
            loss_weight=1.0),
        topk=(1,),
    ))

algorithm_cfg = ConfigDict(
    type='AutoSlim',
    architecture=dict(type='MMClsArchitecture', model=model_cfg),
    distiller=dict(
        type='SelfDistiller',
        components=[
            dict(
                student_module='head.fc',
                teacher_module='head.fc',
                losses=[
                    dict(
                        type='KLDivergence',
                        name='loss_kd',
                        tau=1,
                        loss_weight=1,
                    )
                ]),
        ]),
    pruner=dict(
        type='RatioPruner',
        ratios=(2 / 12, 3 / 12, 4 / 12, 5 / 12, 6 / 12, 7 / 12, 8 / 12, 9 / 12,
                10 / 12, 11 / 12, 1.0)),
    retraining=False,
    bn_training_mode=True,
    input_shape=None)

algorithm = build_algorithm(algorithm_cfg)

from mmrazor.

Zhiweihhh avatar Zhiweihhh commented on August 18, 2024

yes, it appeared the same error

Python 3.8.12 (default, Oct 12 2021, 13:49:34)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from mmcv import ConfigDict
>>> from mmrazor.models import build_algorithm
>>> model_cfg = dict(
...     type='mmcls.ImageClassifier',
...     backbone=dict(type='MobileNetV2', widen_factor=1.5),
...     neck=dict(type='GlobalAveragePooling'),
...     head=dict(
...         type='LinearClsHead',
...         num_classes=2,
...         in_channels=1920,
...         loss=dict(
...             type='LabelSmoothLoss',
...             mode='original',
...             label_smooth_val=0.1,
...             loss_weight=1.0),
...         topk=(1,),
...     ))
>>> algorithm_cfg = ConfigDict(
...     type='AutoSlim',
...     architecture=dict(type='MMClsArchitecture', model=model_cfg),
...     distiller=dict(
...         type='SelfDistiller',
...         components=[
...             dict(
...                 student_module='head.fc',
...                 teacher_module='head.fc',
...                 losses=[
...                     dict(
...                         type='KLDivergence',
...                         name='loss_kd',
...                         tau=1,
...                         loss_weight=1,
...                     )
...                 ]),
...         ]),
...     pruner=dict(
...         type='RatioPruner',
...         ratios=(2 / 12, 3 / 12, 4 / 12, 5 / 12, 6 / 12, 7 / 12, 8 / 12, 9 / 12,
...                 10 / 12, 11 / 12, 1.0)),
...     retraining=False,
...     bn_training_mode=True,
...     input_shape=None)
>>> algorithm = build_algorithm(algorithm_cfg)
Traceback (most recent call last):
  File "/home/ubuntu/miniconda/envs/mmseg/lib/python3.8/site-packages/mmcv/utils/registry.py", line 52, in build_from_cfg
    return obj_cls(**args)
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/algorithms/autoslim.py", line 42, in __init__
    super(AutoSlim, self).__init__(**kwargs)
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/algorithms/base.py", line 57, in __init__
    self._init_pruner(pruner)
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/algorithms/autoslim.py", line 69, in _init_pruner
    pseudo_pruner.prepare_from_supernet(pseudo_architecture)
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 120, in prepare_from_supernet
    self.trace_non_pass_path(pseudo_loss.grad_fn, module2name, var2module,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 558, in trace_non_pass_path
    parser(self, grad_fn, module2name, var2module, cur_path,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 700, in linear_backward_parser
    self.trace_non_pass_path(parent, module2name, var2module, cur_path,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  [Previous line repeated 2 more times]
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 558, in trace_non_pass_path
    parser(self, grad_fn, module2name, var2module, cur_path,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 663, in conv_backward_parser
    self.trace_non_pass_path(parent, module2name, var2module, cur_path,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 558, in trace_non_pass_path
    parser(self, grad_fn, module2name, var2module, cur_path,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 663, in conv_backward_parser
    self.trace_non_pass_path(parent, module2name, var2module, cur_path,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 565, in trace_non_pass_path
    self.trace_non_pass_path(parent, module2name,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 558, in trace_non_pass_path
    parser(self, grad_fn, module2name, var2module, cur_path,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 731, in concat_backward_parser
    self.trace_non_pass_path(parent, module2name, var2module,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 558, in trace_non_pass_path
    parser(self, grad_fn, module2name, var2module, cur_path,
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/pruners/structure_pruning.py", line 653, in conv_backward_parser
    variable = grad_fn.next_functions[1][0].variable
AttributeError: 'SliceBackward' object has no attribute 'variable'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ubuntu/project/hzw/mmrazor-master/mmrazor/models/builder.py", line 20, in build_algorithm
    return ALGORITHMS.build(cfg)
  File "/home/ubuntu/miniconda/envs/mmseg/lib/python3.8/site-packages/mmcv/utils/registry.py", line 212, in build
    return self.build_func(*args, **kwargs, registry=self)
  File "/home/ubuntu/miniconda/envs/mmseg/lib/python3.8/site-packages/mmcv/cnn/builder.py", line 27, in build_model_from_cfg
    return build_from_cfg(cfg, registry, default_args)
  File "/home/ubuntu/miniconda/envs/mmseg/lib/python3.8/site-packages/mmcv/utils/registry.py", line 55, in build_from_cfg
    raise type(e)(f'{obj_cls.__name__}: {e}')
AttributeError: AutoSlim: 'SliceBackward' object has no attribute 'variable'

from mmrazor.

HIT-cwh avatar HIT-cwh commented on August 18, 2024

I can run the above code normally on both cpu and cuda. And the information of the running environments is as follows:

Environment info:
------------------------------------------------------------
sys.platform: linux
Python: 3.8.12 (default, Oct 12 2021, 13:49:34) [GCC 7.5.0]
CUDA available: True
GPU 0: Tesla PG503-216
CUDA_HOME: /mnt/lustre/share//cuda-10.1
NVCC: Cuda compilation tools, release 10.1, V10.1.168
GCC: gcc (GCC) 5.4.0
PyTorch: 1.9.1+cu102
PyTorch compiling details: PyTorch built with:
  - GCC 7.3
  - C++ Version: 201402
  - Intel(R) Math Kernel Library Version 2020.0.0 Product Build 20191122 for Intel(R) 64 architecture applications
  - Intel(R) MKL-DNN v2.1.2 (Git Hash 98be7e8afa711dc9b66c8ff3504129cb82013cdb)
  - OpenMP 201511 (a.k.a. OpenMP 4.5)
  - NNPACK is enabled
  - CPU capability usage: AVX2
  - CUDA Runtime 10.2
  - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70
  - CuDNN 7.6.5
  - Magma 2.5.2
  - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=10.2, CUDNN_VERSION=7.6.5, CXX_COMPILER=/opt/rh/devtoolset-7/root/usr/bin/c++, CXX_FLAGS= -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -fopenmp -DNDEBUG -DUSE_KINETO -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wno-narrowing -Wall -Wextra -Werror=return-type -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-result -Wno-unused-local-typedefs -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_VERSION=1.9.1, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=ON, USE_NNPACK=ON, USE_OPENMP=ON,

TorchVision: 0.10.1+cu102
OpenCV: 4.5.3
MMCV: 1.3.18
MMCV Compiler: GCC 5.4
MMCV CUDA Compiler: 10.1
MMClassification: 0.16.0+
------------------------------------------------------------

Could you provide your pytorch version? And make sure that the codes in MMRazor and MMClassification are not modified.

from mmrazor.

HIT-cwh avatar HIT-cwh commented on August 18, 2024

And pls check there are no slice operations in MobileNetV2, mmcls.

from mmrazor.

Zhiweihhh avatar Zhiweihhh commented on August 18, 2024

这是我的环境信息,代码没有其他改动,直接按照默认配置跑的

2022-01-07 10:13:59,491 - mmcls - INFO - Environment info:
------------------------------------------------------------
sys.platform: linux
Python: 3.8.12 (default, Oct 12 2021, 13:49:34) [GCC 7.5.0]
CUDA available: True
GPU 0: Tesla V100-SXM2-32GB
CUDA_HOME: /usr/local/cuda-11.1
NVCC: Build cuda_11.1.TC455_06.29069683_0
GCC: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
PyTorch: 1.8.1
PyTorch compiling details: PyTorch built with:
  - GCC 7.3
  - C++ Version: 201402
  - Intel(R) oneAPI Math Kernel Library Version 2021.3-Product Build 20210617 for Intel(R) 64 architecture applications
  - Intel(R) MKL-DNN v1.7.0 (Git Hash 7aed236906b1f7a05c0917e5257a1af05e9ff683)
  - OpenMP 201511 (a.k.a. OpenMP 4.5)
  - NNPACK is enabled
  - CPU capability usage: AVX2
  - CUDA Runtime 10.1
  - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_61,code=sm_61;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_37,code=compute_37
  - CuDNN 7.6.3
  - Magma 2.5.2
  - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=10.1, CUDNN_VERSION=7.6.3, CXX_COMPILER=/opt/rh/devtoolset-7/root/usr/bin/c++, CXX_FLAGS= -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -fopenmp -DNDEBUG -DUSE_KINETO -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -O2 -fPIC -Wno-narrowing -Wall -Wextra -Werror=return-type -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-result -Wno-unused-local-typedefs -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_VERSION=1.8.1, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=ON, USE_NNPACK=ON, USE_OPENMP=ON,

TorchVision: 0.9.1
OpenCV: 4.5.1
MMCV: 1.4.2
MMCV Compiler: GCC 9.3
MMCV CUDA Compiler: 11.1
MMClassification: 0.19.0+

from mmrazor.

HIT-cwh avatar HIT-cwh commented on August 18, 2024

我和我的同事反复验证了好多次,依旧复现不了您的bug,很抱歉

from mmrazor.

Zhiweihhh avatar Zhiweihhh commented on August 18, 2024

这个问题现在解决了,是我torch的cuda版本和mmcv的cuda版本不匹配导致的。
现在还有个问题想问一下,官方在复现autoslim算法的时候,mobilenetv2是否有加载预训练呢,因为我发现默认配置只用了50的epoch来训练supernet,和autoslim官方的300差的蛮多的。
还有就是可以提供一份step1训练mobilenetv2的log么,感谢回复

from mmrazor.

HIT-cwh avatar HIT-cwh commented on August 18, 2024

Using English is more appreciated for better community discussion around the world.

The total training epochs of supernet pretain is 50. You can find "For all network architectures we train 50 epochs with squeezed learning rate schedule to obtain a slimmable model for greedy slimming" in the experiments part of "AutoSlim: Towards One-Shot Architecture Search for Channel Numbers".

The log of step 1 will be released in the next version soon.

from mmrazor.

tanghy2016 avatar tanghy2016 commented on August 18, 2024

这个问题现在解决了,是我torch的cuda版本和mmcv的cuda版本不匹配导致的。 现在还有个问题想问一下,官方在复现autoslim算法的时候,mobilenetv2是否有加载预训练呢,因为我发现默认配置只用了50的epoch来训练supernet,和autoslim官方的300差的蛮多的。 还有就是可以提供一份step1训练mobilenetv2的log么,感谢回复

我遇到跟你类似的问题,你的pytorch的CUDA版本和MMCV的CUDA版本不匹配是在哪里看出来的呢?
我的环境是这样的:

sys.platform: linux
Python: 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
CUDA available: True
GPU 0,1,2,3: GeForce RTX 2080 Ti
CUDA_HOME: /usr/local/cuda
NVCC: Cuda compilation tools, release 10.1, V10.1.243
GCC: gcc (GCC) 5.4.0
PyTorch: 1.8.1+cu101
PyTorch compiling details: PyTorch built with:
  - GCC 7.3
  - C++ Version: 201402
  - Intel(R) Math Kernel Library Version 2020.0.0 Product Build 20191122 for Intel(R) 64 architecture applications
  - Intel(R) MKL-DNN v1.7.0 (Git Hash 7aed236906b1f7a05c0917e5257a1af05e9ff683)
  - OpenMP 201511 (a.k.a. OpenMP 4.5)
  - NNPACK is enabled
  - CPU capability usage: AVX2
  - CUDA Runtime 10.1
  - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70
  - CuDNN 7.6.3
  - Magma 2.5.2
  - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=10.1, CUDNN_VERSION=7.6.3, CXX_COMPILER=/opt/rh/devtoolset-7/root/usr/bin/c++, CXX_FLAGS= -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -fopenmp -DNDEBUG -DUSE_KINETO -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -O2 -fPIC -Wno-narrowing -Wall -Wextra -Werror=return-type -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-result -Wno-unused-local-typedefs -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_VERSION=1.8.1, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=ON, USE_NNPACK=ON, USE_OPENMP=ON, 

TorchVision: 0.9.1+cu101
OpenCV: 4.5.5
MMCV: 1.4.2
MMCV Compiler: GCC 7.3
MMCV CUDA Compiler: 10.1
MMClassification: 0.19.0+e4e9513

from mmrazor.

wutongshenqiu avatar wutongshenqiu commented on August 18, 2024

Hi, tanghy2016. Could you please try downgrade pytorch version to 1.8.0 and have a look again?

from mmrazor.

tanghy2016 avatar tanghy2016 commented on August 18, 2024

Hi, tanghy2016. Could you please try downgrade pytorch version to 1.8.0 and have a look again?

非常感谢, 已经可以正常运行了

from mmrazor.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.