extend ../_components/base.pug

block pagetitle
    | Machine Learning APIs  

block css 
    link(rel="stylesheet", href="../css/native-persistence.css")
    link(rel="stylesheet", href="../css/compute-apis.css")
    link(rel="stylesheet", href="../css/machinelearning.css")

  



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="/public/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
                 h3.machine1__title.machine-top What is it?
                 p.machine1__text 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="/public/img/features/machinelearning/image.svg", alt="image") 
     

    section.compute2
     .container
       h2.compute2__h2 Benefits of Apache Ignite Machine Learning API
       .machineitem.machineitem1.flexi
          h3.machine__title Expedite the training process with horizontal cluster scalability
          .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
                h3.h4.nativebotblock__title
                    img(src="/public/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
                h3.h4.nativebotblock__title
                    img(src="/public/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




