machine-learning-exchange / mlx Goto Github PK
View Code? Open in Web Editor NEWMachine Learning eXchange (MLX). Data and AI Assets Catalog and Execution Engine
Home Page: https://ml-exchange.org/
License: Apache License 2.0
Machine Learning eXchange (MLX). Data and AI Assets Catalog and Execution Engine
Home Page: https://ml-exchange.org/
License: Apache License 2.0
Only project maintainers can see the details of this issue
in corresponding deployment pages (compose, kubernetes etc..)
Enable 3rd party applications to interact with the MLX API server.
pip install mlx-...
The MLX
name is already taken on PyPI, so we could decide between:
mlx-client
mlx-api
mlx-api-client
ml-exchange
See #19 (review)
Start the MLX-API server locally or inspect the logs of the deployed mlx-api
pod.
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
$ python3 -m swagger_server
* MLX API version: 0.1.27
* Enabled cross-origin support with 'flask-cors': origins='*'
* Serving Flask app "__main__" (lazy loading)
* Debug mode: off
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Running on http://192.168.1.118:8080/ (Press CTRL+C to quit)
As the warning suggests, we need to run the mlx-api
on a production WSGI server:
The IBM Research project CodeNet provides various datasets and Jupyter notebook.
It would be great to add one of those datasets and a Jupyter notebook to the MLX catalog.
It should not be
Is your feature request related to a problem? Please describe.
Currently, we only can access MAX models if we deployed them using Kubernetes deployment. Both kfserving and model mesh won't work for MAX because MAX models are mapped with non-configurable endpoints and needs complex pre/post-processing methods.
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
Describe the bug
Reported by @blublinsky
Trying to launch a pipeline from mlx - it brings kubeflow pipelines screen, but execution does not happen.
Steps to reproduce
curl -X POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d '{}' \
'http://{$MLX_API_SERVER}/apis/v1alpha1/pipelines/fdda3ca4-39c1-4ed0-8781-f54d202a4ec6/run?run_name=A%20demo%20of%20recursive%20conditional%20pipeline%20-%20flip%20coin'
Reported Error
"error: In single-user mode, ListExperiment cannot filter by namespace"
"Error while trying to run pipeline fdda3ca4-39c1-4ed0-8781-f54d202a4ec6:
{\"error\":\"Invalid input error: In single-user mode, ListExperiment cannot filter by namespace.\",\"code\":3,
\"message\":\"Invalid input error: In single-user mode, ListExperiment cannot filter by namespace.\",\"details\":
[{\"@type\":\"type.googleapis.com/api.Error\",\"error_message\":
\"In single-user mode, ListExperiment cannot filter by namespace.\",
\"error_details\":\"Invalid input error: In single-user mode, ListExperiment cannot filter by namespace.\"}]}\n
KFP URL: 172....:8888 (400)"
Environment
The MLX API code relies extensively on "deployed infrastructure" like the MySQL database and Minio S3 storage provisioned by Kubeflow Pipelines. Thus it is nearly impossible to test any of the API endpoints in isolation on a local developer notebook.
Since we now have a working MLX Katalog "deployment" with the Quickstart guide we should be able to implement a unittest
suite for all of the Katalog specific API endpoints that do not rely on running Kubeflow Pipelines, like register, list, delete, download.
Once we have a working KIND (Kubernetes in Docker) setup #73 we should be able to point the unittest
suite to that, or, to any provisioned MLX Kubernetes cluster.
[This is] a temporary workaround ... [cannot] pass userid header via kfp.KfpClient directly.
The issue on the kubeflow/pipelines
repo to track progress for an actual fix is kubeflow/pipelines#5138
Originally posted by @ckadner in #114 (comment)
Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment
Additional context
Add any other context about the problem here.
Describe the bug
The Quickstart UI is missing any upload functionality
To Reproduce
Deploy quickstart on docker-compose and start the UI - you won't see any upload buttons
Expected behavior
Upload buttons/functionality available as in kubernetes version
Environment
Additional context
Quickstart is supposed to give users a full experience on how to manage assets. adding, updating and deleting is important in the UI as well
@ckadner we probably need a set of instructions for how to install the java jar version of codegen. Homebrew and maven plugin might be too complicated and it may change based on the user's java/brew config.
Originally posted by @Tomcli in #71 (comment)
Describe the bug
Right now the model deployment code template is hard coded to the anonymous
namespace, we need to make it configurable in order to work in the multi-user environment.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment
Additional context
Add any other context about the problem here.
The experiments iframe points to /_/pipeline/?ns=mlx#/experiments
which contains the whole experiments view from kubeflow dashboard. The original /pipeline/#/experiments
doesn't work since kfp v.13. The original link can't get correct namespace information and fails to show the experiments.
To Reproduce
Steps to reproduce the behavior:
Pipelines
and Select View Experiments
Expected behavior
Only show the experiments views without kubeflow namespace selector and nav bar.
Add a script such as the one referenced to ensure that a source file has a license header and it is likely that SPDX will be used to create SBOM (Software Bill of Materials) for OSS
Describe the bug
When uploading a (potentially defunct) component.yaml breaks UI. Uploading works but detail view on the component is empty
To Reproduce
Expected behavior
Detail view of component is showing up
Environment
Describe the bug
Notebook launch fails with blank screen. Error on the web console:
"__init__() missing 2 required positional arguments: 'pipeline_name' and 'experiment_name'"
Debugging this problem, it seems to be raised by the NotebookOp
class initialization.
mlx/api/server/swagger_server/code_templates/run_notebook.TEMPLATE.py
Lines 26 to 43 in 350c944
This change in kfp-notebook causes the error now:
elyra-ai/kfp-notebook@21ebe68
elyra-ai/kfp-notebook#83
kfp -> 1.5.0 (not out yet, need to build from source)
kfp-tekton -> 0.8.0-rc0
kfserving -> 0.5.0.1
Is your feature request related to a problem? Please describe.
For the datasets, we want to expose the provider.url
in the details page and let users to redirect to the developer.ibm.com
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
Describe the bug
A clear and concise description of what the bug is.
To Reproduce
localhost:9000
in a browserminio
service logAPI: http://<my IP>:9000 http://127.0.0.1:9000
Console: http://<my IP>:40843 http://127.0.0.1:40843
Documentation: https://docs.min.io
WARNING: Console endpoint is listening on a dynamic port (40843), please use --console-address ":PORT" to choose a static port.
Expected behavior
Minio dashboard should open up
Screenshots
localhost:9000/
Environment
Additional context
Is your feature request related to a problem? Please describe.
Right now there's no way for the admin to logout other than clear up the browser cookies, so we need a logout page to simply this process.
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
project is too early to be exposing an operator deployment
$ grep -o -h -E "http.*yaml" bootstrapper/configmap.yaml | \
while read url; do \
curl -s -o /dev/null -w "%{http_code}" $url; echo ": ${url}"; \
done | grep --color "404"
404: https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-audio-classifier.yaml
404: https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-breast-cancer-mitosis-detector.yaml
404: https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-facial-age-estimator.yaml
404: https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-image-segmenter.yaml
404: https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-news-text-generator.yaml
404: https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-sports-video-classifier.yaml
The swagger-codegen
CLI can be readily installed from external sources and need not be part of this repository.
The JAR file
/api/swagger-codegen-cli-2.4.8.jar
appears to contain a large number of Java dependencies in binary form (approx. 7000 .class Java binary files). We recommend that LF projects should not distribute binary files as part of their source code repositories. There are several reasons for this, including because it is harder for users of the source code repos to know about the provenance or contents of the binary files. In the presence of copyleft licenses these binaries might require sharing the corresponding source code.
It is strongly recommended this JAR file be removed from the source code repo, and instead (if necessary) configuring the build system to retrieve it from an upstream location at build time / install time, as applicable. Or, alternatively, adjusting the documentation to instruct users where they can obtain these dependencies themselves, rather than distributing the binaries
Furthermore, the swagger-cli
is not required for code generation. Only the swagger-codegen
is required.
We are using swagger-codegen
version 2.4.x
to generate our API as swagger-codegen
version 3.0.x
no longer supports python
(server) any longer.
Below are the instructions for installing the latest swagger-codegen
version 2.x
using Homebrew. For installation on other platforms, go to swagger-api/swagger-codegen
on GitHub.
Note: swagger-codegen
3.x
does not support the Python (server) anymore, so we need to downgrade to version 2.x
(@2
):
brew search swagger-codegen@
brew install swagger-codegen@2
brew link --force swagger-codegen@2
Currently the UI displays the name of the assets (i.e. pipelines) as it was provided (or extracted from YAML) during pipeline registration. Depending on the means of registration (via MLX UI, KFP UI, KFP SDK, MLX API, MLX catalog import, or MLX bootstrapper) there are cases when the name defaults to a quasi ID like trusted-ai
or my-pipeline
. It may be useful to have the UI replace those dashes with spaces and apply title case to the name.
Describe the bug
Run the /quickstart. Here modified to run without the API. See error miniosetup_1 | mc: <ERROR> Unable to initialize new alias from the provided credentials
. Even the log goes on to say that the mlpipeline
bucket was created, in fact it was not.
This error only occurred once in about 50 starts of Docker Compose. Unfortunately, the service dependency stated in the docker-compose.yaml
file does only guarantee that the dependent service has started. It does not guarantee that it has completed initialization (https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on)
$ docker compose --project-name no_api up minio miniosetup mysql mlx-ui
[+] Running 7/7
⠿ Network no_api_default Created 0.4s
⠿ Volume "no_api_data-minio" Created 0.0s
⠿ Volume "no_api_data-mysql" Created 0.0s
⠿ Container no_api_mysql_1 Started 3.1s
⠿ Container no_api_mlx-ui_1 Started 3.1s
⠿ Container no_api_minio_1 Started 3.1s
⠿ Container no_api_miniosetup_1 Started 4.8s
Attaching to minio_1, miniosetup_1, mlx-ui_1, mysql_1
miniosetup_1 | mc: <ERROR> Unable to initialize new alias from the provided credentials. Get "http://minio:9000/probe-bucket-sign-gds95kgtrplz/?location=": dial tcp 172.19.0.3:9000: connect: connection refused.
miniosetup_1 | Bucket created successfully `miniohost/mlpipeline`.
miniosetup_1 | Access permission for `miniohost/mlpipeline` is set to `download`
minio_1 | API: http://172.19.0.3:9000 http://127.0.0.1:9000
minio_1 |
minio_1 | Console: http://172.19.0.3:9001 http://127.0.0.1:9001
minio_1 |
minio_1 | Documentation: https://docs.min.io
miniosetup_1 exited with code 0
...
Describe the bug
When running single user MLX, the pipeline run is returning the below errors:
"Error while trying to run pipeline bdddf286-4c26-46b8-9af5-d08aafc2ce1d: 'MaxRetryError' object has no attribute 'body'"
However, for component, model, dataset, notebook runs, the pipeline run works fine.
To Reproduce
Install kustomize 3.2.1
git clone https://github.com/machine-learning-exchange/manifests -b mlx-single-user
cd manifests
# run the below command two times if the CRDs take too long to provision.
kustomize build example | kubectl apply -f -
Go to <public_ip>:30380/mlx, publish the default pipeline in the view all pipelines and run it. You will see a blank page because the API is returning the above error.
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment
Additional context
Add any other context about the problem here.
Describe the bug
When getting a list of pipelines from Kubeflow 1.3 using the MLX API. The server returns 500 with these errors
"The MySQL table 'mlpipeline.pipelines_extended' does not match Swagger class 'ApiPipelineExtended'.\n Found table with columns:\n - 'UUID' varchar(255)\n - 'CreatedAtInSec' bigint(20)\n - 'Name' varchar(255)\n - 'Description' longtext\n - 'Parameters' longtext\n - 'Status' varchar(255)\n - 'DefaultVersionId' varchar(255)\n - 'Namespace' varchar(63)\n - 'Annotations' longtext\n - 'Featured' tinyint(1)\n - 'PublishApproved' tinyint(1).\n Expected table with columns:\n - 'UUID' varchar(255)\n - 'CreatedAtInSec' bigint(20)\n - 'Name' varchar(255)\n - 'Description' longtext\n - 'Parameters' longtext\n - 'Status' varchar(255)\n - 'DefaultVersionId' varchar(255)\n - 'Annotations' longtext\n - 'Featured' tinyint(1)\n - 'PublishApproved' tinyint(1).\n Delete and recreate the table by calling the API endpoint 'DELETE /pipelines_extended/*'"
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment
Additional context
Add any other context about the problem here.
Describe the bug
@yhwang can you describe the errors that you found?
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment
Additional context
Add any other context about the problem here.
The logo needs to be update in:
Find them here: https://github.com/machine-learning-exchange/artwork
Follow up to PR #59
namespace
makes the pipeline public (DEFAULT ?)namespace
makes the pipeline privatenamespace
(implicitly provided by UI, explicitly accepted by API)anonymous
user shows only public pipelinesnamespace
parameter?)$ if [ $EXIT_CODE -eq 0 ]; then
echo "No changes detected - skipping job."
travis_terminate 0
No changes detected - skipping job.
However, if there were multiple commits during the day and the last commit of the day has no API/UI changes, then the CRON job will terminate early even though there have been other UI / API changes earlier during the day.
Describe the bug
catalog_1 | "error_message": "The MySQL table 'mlpipeline.pipelines' does not match Swagger class 'ApiPipeline'.\n Found table with columns:\n - 'UUID' varchar(255)\n - 'CreatedAtInSec' bigint(20)\n - 'Name' varchar(255)\n - 'Description' longtext\n - 'Parameters' longtext\n - 'Status' varchar(255)\n - 'DefaultVersionId' varchar(255)\n - 'Namespace' varchar(63).\n Expected table with columns:\n - 'UUID' varchar(255)\n - 'CreatedAtInSec' bigint(20)\n - 'Name' varchar(255)\n - 'Description' longtext\n - 'Parameters' longtext\n - 'Status' varchar(255)\n - 'DefaultVersionId' varchar(255)\n - 'Namespace' varchar(255).\n Delete and recreate the table by calling the API endpoint 'DELETE /pipelines/*'",
See local cluster deployment options for Kubeflow Pipelines at https://www.kubeflow.org/docs/components/pipelines/installation/localcluster-deployment/.
The MLX API and UI should simply be deployed on top of that. Easy as pie 😄 🍰
Describe the bug
Error when starting quickstart on docker compose
To Reproduce
https://github.com/ckadner/mlx.git
cd mlx
git checkout docker-compose
docker-compose up
ERROR: Service 'dashboard' depends on service 'mlx-init' which is undefined.
Expected behavior
quickstart starts
Screenshots
Environment
Additional context
Add any other context about the problem here.
Is your feature request related to a problem? Please describe.
MLX right now only can login using basic browser form. We need to add support for AppID login in the MLX login page.
The Kubeflow way of forcing login is based on domain path. However, MLX needs to force login based on user role, not the domain path. Thus, it needs to support the AppID login using the following documentations.
https://cloud.ibm.com/docs/appid?topic=appid-web-apps
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
From @Tomcli:
... we can leverage the script we have wrote for kfp-tekton. This way we don't need to build the image if the api/ui code hasn't changed
https://github.com/kubeflow/kfp-tekton/blob/master/.travis.yml#L73-L95
Originally posted by @Tomcli in #27 (comment)
Describe the bug
Supported upload file typeextension for uploading components doesn't include yaml
To Reproduce
Try to upload a yaml file - the default filter is not including .yaml extension
Expected behavior
.yaml extension in filter list of file selection dialog
Environment
Many of our npm
dependencies get pinned to a certain version (see package-lock.json
) which become outdated quickly. Those outdated version often have security vulnerabilities that get fixed in more recent versions. However the MLX UI keeps using the pinned outdated versions.
We should try using tools like npm-upgrade
and build that into a Makefile
target and integrate a check for outdated (minor) versions in our CI/CD checks.
This is the first blog post I hit after googling this topic, but there are plenty more:
https://hudochenkov.com/posts/up-to-date-dependencies/
@drewbutlerbb4 -- could you take this on?
@drewbutlerbb4 -- in the MLX API, assets can be uploaded using either .tgz
/.tar.gz
file formats or .yaml
/.yml
files, as well as URLs pointing to files in either of those formats.
Do you know why/where the UI enforces .tgz
/.tar.gz
upload formats?
Is your feature request related to a problem? Please describe.
Currently, the sidebar settings are stored in the API pod's memory, which means whenever the pod crashed or horizontally scaled, the sidebar settings are having conflicts when users refresh their page. We need to store the sidebar settings just like other assets so that it can be resilient with scales and crashes.
When running MLX with docker-compose
the KFP API is not available.
We need to disable the pipeline run capabilities in the UI when the REACT_APP_KFP
is not set, or set it to "UNAVAILABLE"
like for the MLX API:
mlx/quickstart/docker-compose.yaml
Line 58 in 56d5f6f
Describe the bug
The status line of component upload dialog (bottom right) is hardly readable
To Reproduce
Screenshots
Expected behavior
Status line is placed a little higher
Environment
Describe the bug
The default multi-user permission cannot create some CRDs such as datashim and inferenceserivice. A quick fix can be apply cluster admin to the service account, but for more secure fix we need to patch new permission to the kubeflow-editor
service account in each user namespace.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment
Additional context
Add any other context about the problem here.
Describe the bug
Uploading any asset causes all other assets of the same type to disappear from the Featured Page
(Might be specific to docker compose)
More specifically, uploading a model causes all other models to lose their publish_approved and featured values.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment
Additional context
Add any other context about the problem here.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.