## Temas selectos de modelado (aka optimización 2/avanzada)
de la Maestría en Ciencia de Datos (MCD)
---
## Descripción
Es una continuación directa de los temas vistos en el curso de optimización del semestre de otoño.
----
## Descripción
Los temas los pueden encontrar en el [libro de optimización](https://itam-ds.github.io/analisis-numerico-computo-cientifico/) el cual revisamos durante el semestre de otoño. Tal libro continuaremos revisando en este semestre de primavera.
Este libro está creado a partir del [repo](https://github.com/ITAM-DS/analisis-numerico-computo-cientifico/) del curso.
<!-- .slide: style="font-size: 28px;" -->
----
## Descripción
¿Cuáles temas revisaremos en optimización 2?
* Optimización en redes su relación con programación lineal y temas sobre dualidad.
* Generalización de algoritmos para resolver problemas CIECO (*Constrained Inequality and Equality Convex Optimization*).
:point_right: la programación lineal es un ejemplo de CIECO.
<!-- .slide: style="font-size: 28px;" -->
----
* Optimización de código:
* Perfilamiento de código.
* Uso de paquetes para compilación a C (Cython y Rcpp).
* Operaciones BLAS nivel 1, 2 y 3.
* Cómputo en paralelo en la CPU y en la GPU.
* Temas selectos (algunos de los siguientes, depende del tiempo que tengamos):
* Métodos basados en componentes estocásticas.
* Métodos de memoria limitada.
* Aproximaciones de rango bajo.
* Métodos Cuasi-Newton.
* Descenso por coordenadas.
* Máquina de Soporte Vectorial distribuida.
* Métodos basados en espacios de Krylov.
<!-- .slide: style="font-size: 28px;" -->
----
## Descripción
Los temas anteriores están enmarcados dentro del [análisis numérico/cómputo científico](https://itam-ds.github.io/analisis-numerico-computo-cientifico/1.computo_cientifico/1.1/Analisis_numerico_y_computo_cientifico.html) que estudia algoritmos para resolver problemas de mate que involucran cantidades continuas. Varios de los algoritmos se intersectan con los desarrollados dentro del área de [investigación de operaciones](https://en.wikipedia.org/wiki/Operations_research).
----
## Descripción
:point_right: Los algoritmos que revisamos son clásicos y los utilizados hoy en día en el cálculo numérico, aprendizaje de máquina y gran escala se apoyan o han tomado ideas de ellos.
:point_right: Es un curso formativo que les proporciona fundamentos en algoritmos y herramientas computacionales para su desarrollo profesional en la ciencia de datos :)
:point_right: Estudiamos los cursos de optimización pues todos los modelos o métodos de aprendizaje de máquina plantean problemas de optimización.
<!-- .slide: style="font-size: 28px;" -->
----
## Descripción
Para ver más descripción y objetivos de este curso consultar el [temario](https://drive.google.com/file/d/17ydFChBFxxAOzsIPwUu90KR01zRXdCNZ/view?usp=sharing).
---
## ¿Software?
* Lenguajes de programación: Python, R y un poquito de C. Paquetes para cómputo secuencial y en paralelo en la CPU y la GPU como:
* Multiprocessing, Dask, parallel, openMP.
* CuPy, gputools, CUDA.
* Docker, git, bash, [github](https://github.com/), [dockerhub](https://hub.docker.com/).
* Software para optimización.
->Posible: Julia.
:point_right: Está encapsulado en la imagen de [docker](https://www.docker.com/) [palmoreck/jupyterlab_optimizacion_2:3.2.8](https://github.com/palmoreck/dockerfiles/tree/master/jupyterlab/optimizacion_2)
<!-- .slide: style="font-size: 28px;" -->
----
## ¿Hardware?
Usaremos AWS para cómputo en la nube y sus máquinas locales. En AWS usaremos kale y kubeflow (basados en [kubernetes](https://kubernetes.io/)).
El programa [AWS Academy](https://aws.amazon.com/training/awsacademy/) nos ayudará mucho y les invitaré a sus correos con dominio itam.mx
----
### ¿Kubernetes?
Es un sistema *open source* para el despliegue, monitoreo, escalamiento y manejo automático de aplicaciones que se ejecutan en contenedores.
No levantaremos un Kubernetes desde cero pues es un tema avanzado y no es necesario para la clase. Usaremos [kale](https://github.com/kubeflow-kale/kale) en AWS que por debajo tendrá un [minikube](https://github.com/kubernetes/minikube) para lanzamiento de pipelines de procesamiento.
----
:point_right: usaremos a un alto nivel la herramienta de kale.
Ver [AWS-y-Kubernetes](https://github.com/ITAM-DS/analisis-numerico-computo-cientifico/wiki/4.AWS-y-Kubernetes) del wiki para más información sobre Kubernetes.
<!-- .slide: style="font-size: 28px;" -->
----
## ¿GPU?
¿requerimos una tarjeta gráfica en nuestra laptop?
Si tienen una laptop con una tarjeta gráfica pueden realizar las instrucciones de [aquí](https://github.com/palmoreck/programming-languages/tree/master/C/extensiones_a_C/CUDA/instalacion) para realizar las instalaciones correspondientes. Pero **no** será necesario que tengan una laptop con una tarjeta gráfica :)
----
Vamos a resolver lo anterior con AWS y/o con [google colab](https://colab.research.google.com/github/shranith/Colab-intro/blob/master/Colab_intro.ipynb).
:point_right: Para google-colab requieren una cuenta en gmail.
Algunas ligas de referencia de *google colab* son: [colaboratory-faq](https://research.google.com/colaboratory/faq.html) y [colab-github-demo](https://github.com/googlecolab/colabtools/blob/master/notebooks/colab-github-demo.ipynb).
<!-- .slide: style="font-size: 28px;" -->
----
Hay un botón en el repo de binder para interactividad y cómputo con la CPU: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/palmoreck/dockerfiles-for-binder/jupyterlab_optimizacion_2?urlpath=lab/tree/analisis-numerico-computo-cientifico)
Antes coloqué también botones ![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg) para la GPU y pueden ser una opción para interactividad.
---
## Dinámica
La clase son los jueves de 6 a 9 pm y es **en línea** a través de [Zoom](https://zoom.us/). Hacemos *breaks* de 10 min cada hora.
En el repo creé la rama [optimizacion-2-2022](https://github.com/ITAM-DS/analisis-numerico-computo-cientifico/tree/optimizacion-2-2022) que contiene información en específico de este semestre.
----
## Dinámica
Cada clase revisamos el [libro de optimización](https://itam-ds.github.io/analisis-numerico-computo-cientifico/) que contiene los temas del curso.
En la [liga](https://github.com/ITAM-DS/analisis-numerico-computo-cientifico/tree/optimizacion-2-2022#organizaci%C3%B3n-del-curso) encuentran la agenda.
Usamos [canvas](https://www.instructure.com/es/canvas) donde publicaré el examen y prácticas a realizar.
----
## Calificación
|Exámenes(1)| Prácticas(2)|Proyecto final|
|:---:|:---:|:---:|
|20|20|40
:heavy_plus_sign: asignaciones que se toman como extra a la calificación final.
**El curso se acredita con calificación mayor o igual a 6.**
Más información en [generalidades del curso de optimización avanzada](https://github.com/ITAM-DS/analisis-numerico-computo-cientifico/blob/optimizacion-2-2022/generalidades_curso_de_optimizacion_avanzada.md).
:point_right: Sus prácticas las entregarán en los repos que se crearán automáticamente en la organización [optimizacion-2-2022-gh-classroom](https://github.com/optimizacion-2-2022-gh-classroom) de [github classroom](https://classroom.github.com/).
<!-- .slide: style="font-size: 28px;" -->
----
## Sobre lo que nunca deben realizar
**Copiar en un examen/tarea/trabajo/entrega pues se pondrá cero en el mismo. Si vuelve a repetirse la situación se le notificará a dirección escolar para realizar la anotación correspondiente en su expediente.**
----
## Sobre lo que siempre deben realizar
**Documentar sus referencias, fuentes, colaboraciones y material que utilizan para resolver sus exámenes, prácticas o proyectos.**
---
## ¿Preguntas?
---
## Tarea para la primer clase
* Crear *user* de [dockerhub](https://hub.docker.com/).
* Unirse al chat de [gitter](https://gitter.im/) con su *user* de *github* dando click en [![Gitter](https://badges.gitter.im/optimizacion-2-2022/community.svg)](https://gitter.im/optimizacion-2-2022/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) o en el repo en la [liga](https://github.com/ITAM-DS/analisis-numerico-computo-cientifico/tree/optimizacion-2-2022#dar-click-en-el-siguiente-bot%C3%B3n-para-unirse-al-chat-del-semestre-enero-mayo-en-gitter-).
* Aceptar la invitación al curso de [AWS Academy](https://aws.amazon.com/training/awsacademy/)
----
## Tarea no para la primer clase
... pero sí para un tiempo razonable (febrero por ejemplo) :)
Desempolvar lo que conocen sobre AWS. Pueden ayudarles las ligas, documentación y videos sobre AWS dentro de [wiki](https://github.com/ITAM-DS/analisis-numerico-computo-cientifico/wiki) del repo.
---
Esta presentación fue realizada con [reveal.js](https://revealjs.com/). Aquí la liga de su *github*: [reveal.js github](https://github.com/hakimel/reveal.js/).
También me apoyé de [hackmd](https://hackmd.io/) para la creación de documentos de forma colaborativa (así como un google drive) y en particular para presentaciones de *reveal.js*. Ver [tutorial](https://hackmd.io/c/tutorials/%2Fs%2Fhow-to-create-slide-deck) para creación de presentaciones con *reveal.js*.
Mi user de *github* es [palmoreck](https://github.com/palmoreck), el medio de contacto es por el chat de [gitter](https://gitter.im/) como **primera opción** y como **segunda opción:** erick89.itam@gmail.com. En [liga](https://mcdatos.itam.mx/erick-palacios/) una breve descripción de mí :)
{"metaMigratedAt":"2023-06-15T18:22:38.594Z","metaMigratedFrom":"YAML","title":"Intro_a_optimizacion_2","breaks":"true","slideOptions":"{\"theme\":\"solarized\",\"transition\":\"fade\",\"controls\":true,\"progress\":true}","contributors":"[{\"id\":\"8b24e736-2935-427d-8d66-2819293128a2\",\"add\":15803,\"del\":8386}]"}