-
Notifications
You must be signed in to change notification settings - Fork 423
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docs: Add page on decentralized AI inference #3407
Open
ielashi
wants to merge
7
commits into
master
Choose a base branch
from
ielashi/ai_inference
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
1709409
docs: Add page on decentralized AI inference
ielashi 1548c21
.
ielashi 521d8b8
.
ielashi e7d1f28
Apply suggestions from code review
ielashi 84c9344
Merge github.com:dfinity/portal into ielashi/ai_inference
ielashi 19cf28a
Merge branch 'ielashi/ai_inference' of github.com:dfinity/portal into…
ielashi 824657b
.
ielashi File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,56 @@ | ||||||||||||||||||||
--- | ||||||||||||||||||||
keywords: [intermediate, concept, AI, ai, deAI, deai] | ||||||||||||||||||||
--- | ||||||||||||||||||||
|
||||||||||||||||||||
import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; | ||||||||||||||||||||
|
||||||||||||||||||||
# Decentralized AI inference | ||||||||||||||||||||
|
||||||||||||||||||||
<MarkdownChipRow labels={["Intermediate", "Concept", "DeAI" ]} /> | ||||||||||||||||||||
|
||||||||||||||||||||
It's possible for canister smart contracts to run inference in a number of ways, depending on the decentralization and performance requirements. | ||||||||||||||||||||
|
||||||||||||||||||||
## Inference on-chain | ||||||||||||||||||||
|
||||||||||||||||||||
Currently, ICP supports on-chain inference of small models using AI libraries such as [Sonos Tract](https://github.com/sonos/tract) that compile to WebAssembly. | ||||||||||||||||||||
Check out the [image classification example](/docs/current/developer-docs/ai/ai-on-chain) to learn how it works. | ||||||||||||||||||||
|
||||||||||||||||||||
### Examples | ||||||||||||||||||||
|
||||||||||||||||||||
- [GPT2](https://github.com/modclub-app/rust-connect-py-ai-to-ic/tree/main/internet_computer/examples/gpt2): An example of GPT2 running on-chain using Rust. | ||||||||||||||||||||
- [ELNA AI](https://github.com/elna-ai): A fully on-chain AI agent platform and marketplace. Supports both on-chain and off-chain LLMs. [Try it here](https://dapp.elna.ai/). | ||||||||||||||||||||
- [Tensorflow on ICP](https://github.com/carlosarturoceron/decentAI): An Azle example that uses TypeScript and a pre-trained model for making predictions. | ||||||||||||||||||||
- [ICGPT](https://github.com/icppWorld/icgpt): A React frontend that uses a C/C++ backend running an LLM fully on-chain. [Try it here](https://icgpt.icpp.world/). | ||||||||||||||||||||
- [ArcMind AI](https://github.com/arcmindai/arcmindai): An autonomous agent written in Rust using chain of thoughts for reasoning and actions. [Try it here](https://arcmindai.app). | ||||||||||||||||||||
|
||||||||||||||||||||
### On-chain inference frameworks | ||||||||||||||||||||
|
||||||||||||||||||||
- [Sonos Tract](https://github.com/sonos/tract): An open-source AI inference engine written in Rust that supports ONNX, TensorFlow, and PyTorch models, and compiles to WebAssembly. | ||||||||||||||||||||
- [MotokoLearn](https://github.com/ildefons/motokolearn): A Motoko package that enables on-chain machine learning. | ||||||||||||||||||||
[The image classification example](https://github.com/dfinity/examples/tree/master/rust/image-classification) explains how to integrate it into a canister to run on ICP. | ||||||||||||||||||||
- [Rust-Connect-Py-AI-to-IC](https://github.com/jeshli/rust-connect-py-ai-to-ic): Open-source tool for deploying and running Python AI models on-chain using Sonos Tract. | ||||||||||||||||||||
- [Burn](https://github.com/tracel-ai/burn): An open-source deep learning framework written in Rust that supports ONNX, and PyTorch models, and compiles to WebAssembly. | ||||||||||||||||||||
[The MNIST example](https://github.com/smallstepman/ic-mnist) explains how to integrate it into a canister to run on ICP. [Try it here](https://jsi2g-jyaaa-aaaam-abnia-cai.icp0.io/). | ||||||||||||||||||||
- [Candle](https://github.com/huggingface/candle): a minimalist ML framework for Rust that compiles to WebAssembly. | ||||||||||||||||||||
[An AI chatbot example](https://github.com/ldclabs/ic-panda/tree/main/src/ic_panda_ai) shows how to run a Qwen 0.5B model in a canister on ICP. | ||||||||||||||||||||
|
||||||||||||||||||||
|
||||||||||||||||||||
## Inference on-device | ||||||||||||||||||||
|
||||||||||||||||||||
An alternative to running the model on-chain would be for the user to download the model from a canister smart contract, and the inference then happens on the user's device. | ||||||||||||||||||||
If the user trusts their own device, then they can trust that the inference ran correctly. | ||||||||||||||||||||
A disadvantage here is that the model needs to be downloaded to the user's device with corresponding drawbacks of less confidentiality of the model and decreased user experience due to increased latency. | ||||||||||||||||||||
ICP supports this use case for practically all existing models because a smart contract on ICP can store models up to 400GiB. | ||||||||||||||||||||
Comment on lines
+40
to
+43
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||
|
||||||||||||||||||||
### Examples | ||||||||||||||||||||
|
||||||||||||||||||||
- [DeVinci](https://github.com/patnorris/DecentralizedAIonIC): An in-browser AI chatbot that uses an open-source LLM model served from ICP. [Try it here](https://x6occ-biaaa-aaaai-acqzq-cai.icp0.io/). | ||||||||||||||||||||
|
||||||||||||||||||||
|
||||||||||||||||||||
## Inference with HTTP calls | ||||||||||||||||||||
|
||||||||||||||||||||
Smart contracts running on ICP can make [HTTP requests through HTTP outcalls](/docs/current/developer-docs/smart-contracts/advanced-features/https-outcalls/https-outcalls-overview) to Web2 services including OpenAI and Claude. | ||||||||||||||||||||
|
||||||||||||||||||||
### Examples | ||||||||||||||||||||
|
||||||||||||||||||||
- [Juno + OpenAI](https://github.com/peterpeterparker/juno-openai): An example using Juno and OpenAI to generate images from prompts. [Try it here](https://pycrs-xiaaa-aaaal-ab6la-cai.icp0.io/). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.