extend ../_components/base.pug

block pagetitle
    title Continuous Machine Learning, Scalable Deep Learning - Apache Ignite
    meta(name="description", content="Apache Ignite Machine Learning is a set of simple and efficient APIs to enable continuous learning. It relies on Ignite's multi-tier storage that bring massive scalability for machine learning and deep learning tasks.")
    link(rel="canonical", href="https://ignite.apache.org/features/machinelearning.html")

    meta(property="og:title", content="Continuous Machine Learning, Scalable Deep Learning - Apache Ignite")
    meta(property="og:type", content="article")
    meta(property="og:url", content="https://ignite.apache.org/features/machinelearning.html")
    meta(property="og:image", content="/img/og-pic.png")
    meta(property="og:description", content="Apache Ignite Machine Learning is a set of simple and efficient APIs to enable continuous learning. It relies on Ignite's multi-tier storage that bring massive scalability for machine learning and deep learning tasks.")

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/compute-apis.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/machinelearning.css?ver=" + config.version)

  



block main
    - global.pageHref = "features"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero
        .container.innerhero__cont
            .innerhero__main
                .innerhero__pre.pb-3 Apache Ignite
                h1.h1.innerhero__h1 Machine Learning<br> APIs
                .innerhero__descr.pt-2.h5.
                    Continuously train, execute and update your machine learning<br> models at scale and in real-time
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--machine(src="/img/features/machinelearning/machine.svg", alt="Machine-hero")
    // /.innerhero

  

    section.machine1
      .container
         .machine1__block.flexi
              .machine1__info
                h2.compute2__h2 Ignite Machine Learning APIs Overview
                p.machine1__text.pt-5 Ignite Machine Learning (ML) is a set of simple, scalable, and efficient tools that allow building predictive machine learning models without costly data transfers.
                h3.machine1__title.machine-top How does Apache Ignite support ML APIs?
                p.machine1__text You have two options:
                .machine1__options.flexi
                  .machine1__option
                    .machine1__number 01
                    .machine1__subtext Use built-in ML APIs for some of the typical ML and deep learning (DL) tasks, such as:
                    .machine1__subtext.flexi
                      span — Classification
                      span — Regression
                      span  — Clustering
                      span — Recommendation
                      span — Preprocessing
                  .machine1__option 
                    .machine1__number 02
                    .machine1__subtext Use external ML and DL libraries that use Apache Ignite as scalable and high-performance distributed data storage:
                    .machine1__subtext.flexi
                      span — TensorFlow
                      span — Scikit
                      span — Spark
                      span — And more
                    
                   
              img.machine1__image(src="/img/features/machinelearning/image.svg", alt="image") 
     

    section.compute2
     .container
       h2.compute2__h2 Benefits of Apache Ignite Machine Learning APIs
       .machineitem.machineitem1.flexi
          h3.machine__title Expedite the training process <br>with horizontally scalable cluster
          .machine__info
            p.machine__text You can distribute your training data set over an unlimited number of cluster nodes and train your models with the speed of memory.<br> With built-in Ignite ML APIs, you:
            .machine__part.flexi
              .compute2-points__item.fz20
              .machine__subtext Avoid, or minimise ETL
            .machine__part.flexi
              .compute2-points__item.fz20
              .machine__subtext Load all your training data sets in the same cluster
            .machine__part.flexi
              .compute2-points__item.fz20
              .machine__subtext Minimise network utilization during the training process
       .machineitem.machineitem1.flexi
          h3.machine__title Execute your ML models with in-memory speed from your application code
          .machine__info
            p.machine__text Once the model is trained, deploy it on the cluster and execute it with in-memory speed. Use built-in Ignite APIs or 3rd party libraries.
       .machineitem.machineitem1.flexi
          h3.machine__title Continue updating your models with new data in real-time
          .machine__info
            p.machine__text Data and user behaviours change rapidly, so you always need to advance your models. With Apache Ignite, you can update your already deployed ML models with new data sets.

            
    // /.compute2

    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                .h4.nativebotblock__title
                    img(src="/img/features/native-rocket.svg", alt="").nativebotblock__icon
                    span Ready to Start?
                p.nativebotblock__text Start coding machine learning APIs
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/machine-learning/machine-learning", target="_blank") Performing Machine Learning
            article.nativebotblock.nativebotblock--learn
                .h4.nativebotblock__title
                    img(src="/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to Learn More?
                p.nativebotblock__text Check out how Apache Ignite updates<br> trained models in real time
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/machine-learning/updating-trained-models", target="_blank") Updating Trained Models




