From d32f83f7101aa80ce1979622315c2322c1e4eccf Mon Sep 17 00:00:00 2001 From: nrvo <151435968+nrvo@users.noreply.github.com> Date: Sat, 4 May 2024 15:39:44 +0200 Subject: [PATCH 1/7] [App] Ollama AMD --- apps/ollama-amd/config.json | 18 ++++++ apps/ollama-amd/docker-compose.yml | 45 ++++++++++++++ apps/ollama-amd/metadata/description.md | 75 ++++++++++++++++++++++++ apps/ollama-amd/metadata/logo.jpg | Bin 0 -> 32923 bytes 4 files changed, 138 insertions(+) create mode 100755 apps/ollama-amd/config.json create mode 100755 apps/ollama-amd/docker-compose.yml create mode 100755 apps/ollama-amd/metadata/description.md create mode 100755 apps/ollama-amd/metadata/logo.jpg diff --git a/apps/ollama-amd/config.json b/apps/ollama-amd/config.json new file mode 100755 index 00000000..7548c70b --- /dev/null +++ b/apps/ollama-amd/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "../schema.json", + "name": "Ollama AMD", + "available": true, + "exposable": true, + "port": 11434, + "id": "ollama-amd", + "tipi_version": 1, + "version": "0.1.32", + "categories": ["ai"], + "description": "Get up and running with Llama 3, Mistral, Gemma, and other large language models.", + "short_desc": "LLMs inference server with OpenAI compatible API", + "author": "ollama", + "source": "https://github.com/ollama/ollama", + "website": "https://ollama.com", + "form_fields": [], + "supported_architectures": ["arm64", "amd64"] +} diff --git a/apps/ollama-amd/docker-compose.yml b/apps/ollama-amd/docker-compose.yml new file mode 100755 index 00000000..ca64c5de --- /dev/null +++ b/apps/ollama-amd/docker-compose.yml @@ -0,0 +1,45 @@ +version: '3.7' + +services: + ollama-amd: + image: ollama/ollama:rocm + restart: unless-stopped + container_name: ollama-amd + environment: + - PORT=11434 + - OLLAMA_ORIGINS=* # Allow cross-origin requests + ports: + - '${APP_PORT}:11434' + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/.ollama:/root/.ollama + devices: + # Attach GPU + - /dev/kfd + - /dev/dri + labels: + # Main + traefik.enable: true + traefik.http.middlewares.ollama-amd-web-redirect.redirectscheme.scheme: https + traefik.http.services.ollama-amd.loadbalancer.server.port: 11434 + # Web + traefik.http.routers.ollama-amd-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ollama-amd-insecure.entrypoints: web + traefik.http.routers.ollama-amd-insecure.service: ollama-amd + traefik.http.routers.ollama-amd-insecure.middlewares: ollama-amd-web-redirect + # Websecure + traefik.http.routers.ollama-amd.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ollama-amd.entrypoints: websecure + traefik.http.routers.ollama-amd.service: ollama-amd + traefik.http.routers.ollama-amd.tls.certresolver: myresolver + # Local domain + traefik.http.routers.ollama-amd-local-insecure.rule: Host(`ollama-amd.${LOCAL_DOMAIN}`) + traefik.http.routers.ollama-amd-local-insecure.entrypoints: web + traefik.http.routers.ollama-amd-local-insecure.service: ollama-amd + traefik.http.routers.ollama-amd-local-insecure.middlewares: ollama-amd-web-redirect + # Local domain secure + traefik.http.routers.ollama-amd-local.rule: Host(`ollama-amd.${LOCAL_DOMAIN}`) + traefik.http.routers.ollama-amd-local.entrypoints: websecure + traefik.http.routers.ollama-amd-local.service: ollama-amd + traefik.http.routers.ollama-amd-local.tls: true diff --git a/apps/ollama-amd/metadata/description.md b/apps/ollama-amd/metadata/description.md new file mode 100755 index 00000000..826d7c49 --- /dev/null +++ b/apps/ollama-amd/metadata/description.md @@ -0,0 +1,75 @@ +# Ollama - AMD +[Ollama](https://github.com/ollama/ollama) allows you to run open-source large language models, such as Llama3 and Mistral, locally. Ollama bundles model weights, configuration, and data into a single package, defined by a Modelfile. + +--- + +## Usage + +### Use with a frontend +- [LobeChat](https://github.com/lobehub/lobe-chat) +- [LibreChat](https://github.com/danny-avila/LibreChat) +- [OpenWebUI](https://github.com/open-webui/open-webui) +- [And more ...](https://github.com/ollama/ollama) + +--- + +### Try the REST API +Ollama has a REST API for running and managing models. + +**Generate a response** +```sh +curl http://localhost:11434/api/generate -d '{ + "model": "llama3", + "prompt":"Why is the sky blue?" +}' +``` + +**Chat with a model** +```sh +curl http://localhost:11434/api/chat -d '{ + "model": "llama3", + "messages": [ + { "role": "user", "content": "why is the sky blue?" } + ] +}' +``` +--- + +### Try in terminal +```sh +docker exec -it ollama ollama run llama3 +``` + +--- + +## Compatible GPUs +Ollama supports the following AMD GPUs: +| Family | Cards and accelerators | +| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| AMD Radeon RX | `7900 XTX` `7900 XT` `7900 GRE` `7800 XT` `7700 XT` `7600 XT` `7600` `6950 XT` `6900 XTX` `6900XT` `6800 XT` `6800` `Vega 64` `Vega 56` | +| AMD Radeon PRO | `W7900` `W7800` `W7700` `W7600` `W7500` `W6900X` `W6800X Duo` `W6800X` `W6800` `V620` `V420` `V340` `V320` `Vega II Duo` `Vega II` `VII` `SSG` | +| AMD Instinct | `MI300X` `MI300A` `MI300` `MI250X` `MI250` `MI210` `MI200` `MI100` `MI60` `MI50` | + +--- + +## Model library +Ollama supports a list of models available on [ollama.com/library](https://ollama.com/library 'ollama model library') + +Here are some example models that can be downloaded: + +| Model | Parameters | Size | Download | +| ------------------ | ---------- | ----- | ------------------------------ | +| Llama 3 | 8B | 4.7GB | `ollama run llama3` | +| Llama 3 | 70B | 40GB | `ollama run llama3:70b` | +| Phi-3 | 3,8B | 2.3GB | `ollama run phi3` | +| Mistral | 7B | 4.1GB | `ollama run mistral` | +| Neural Chat | 7B | 4.1GB | `ollama run neural-chat` | +| Starling | 7B | 4.1GB | `ollama run starling-lm` | +| Code Llama | 7B | 3.8GB | `ollama run codellama` | +| Llama 2 Uncensored | 7B | 3.8GB | `ollama run llama2-uncensored` | +| LLaVA | 7B | 4.5GB | `ollama run llava` | +| Gemma | 2B | 1.4GB | `ollama run gemma:2b` | +| Gemma | 7B | 4.8GB | `ollama run gemma:7b` | +| Solar | 10.7B | 6.1GB | `ollama run solar` | + +> Note: You should have at least 8 GB of RAM available to run the 7B models, 16 GB to run the 13B models, and 32 GB to run the 33B models. \ No newline at end of file diff --git a/apps/ollama-amd/metadata/logo.jpg b/apps/ollama-amd/metadata/logo.jpg new file mode 100755 index 0000000000000000000000000000000000000000..0128b01716b174092a28335eac23e47dd956801b GIT binary patch literal 32923 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 Date: Sat, 4 May 2024 15:47:22 +0200 Subject: [PATCH 2/7] Update docker-compose.yml remove origins --- apps/ollama-amd/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/ollama-amd/docker-compose.yml b/apps/ollama-amd/docker-compose.yml index ca64c5de..700ea23b 100755 --- a/apps/ollama-amd/docker-compose.yml +++ b/apps/ollama-amd/docker-compose.yml @@ -7,7 +7,6 @@ services: container_name: ollama-amd environment: - PORT=11434 - - OLLAMA_ORIGINS=* # Allow cross-origin requests ports: - '${APP_PORT}:11434' networks: From 7dbd4c5063547238a705357e96caa8fda93bfeff Mon Sep 17 00:00:00 2001 From: nrvo <151435968+nrvo@users.noreply.github.com> Date: Sat, 4 May 2024 15:47:49 +0200 Subject: [PATCH 3/7] Update apps/ollama-amd/metadata/description.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- apps/ollama-amd/metadata/description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ollama-amd/metadata/description.md b/apps/ollama-amd/metadata/description.md index 826d7c49..b7773c0d 100755 --- a/apps/ollama-amd/metadata/description.md +++ b/apps/ollama-amd/metadata/description.md @@ -1,4 +1,4 @@ -# Ollama - AMD +# Ollama AMD [Ollama](https://github.com/ollama/ollama) allows you to run open-source large language models, such as Llama3 and Mistral, locally. Ollama bundles model weights, configuration, and data into a single package, defined by a Modelfile. --- From afd8b1c3f31e73ae6614446e5ac2e567e322cf72 Mon Sep 17 00:00:00 2001 From: nrvo <151435968+nrvo@users.noreply.github.com> Date: Sat, 4 May 2024 17:03:46 +0200 Subject: [PATCH 4/7] Update config.json --- apps/ollama-amd/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ollama-amd/config.json b/apps/ollama-amd/config.json index 7548c70b..2b2d00e2 100755 --- a/apps/ollama-amd/config.json +++ b/apps/ollama-amd/config.json @@ -6,7 +6,7 @@ "port": 11434, "id": "ollama-amd", "tipi_version": 1, - "version": "0.1.32", + "version": "0.1.33", "categories": ["ai"], "description": "Get up and running with Llama 3, Mistral, Gemma, and other large language models.", "short_desc": "LLMs inference server with OpenAI compatible API", From b2fa344b118e4b4ef62355945068455d48783ee5 Mon Sep 17 00:00:00 2001 From: nrvo <151435968+nrvo@users.noreply.github.com> Date: Sat, 4 May 2024 17:04:03 +0200 Subject: [PATCH 5/7] Update docker-compose.yml --- apps/ollama-amd/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ollama-amd/docker-compose.yml b/apps/ollama-amd/docker-compose.yml index 700ea23b..c69bd5c4 100755 --- a/apps/ollama-amd/docker-compose.yml +++ b/apps/ollama-amd/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: ollama-amd: - image: ollama/ollama:rocm + image: ollama/ollama:0.1.33-rocm restart: unless-stopped container_name: ollama-amd environment: From 1f7f591eb4752af9e4e4391c995b53bb8103489b Mon Sep 17 00:00:00 2001 From: nrvo <151435968+nrvo@users.noreply.github.com> Date: Sat, 4 May 2024 17:07:22 +0200 Subject: [PATCH 6/7] Update config.json --- apps/ollama-amd/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ollama-amd/config.json b/apps/ollama-amd/config.json index 2b2d00e2..d6ba80aa 100755 --- a/apps/ollama-amd/config.json +++ b/apps/ollama-amd/config.json @@ -1,6 +1,6 @@ { "$schema": "../schema.json", - "name": "Ollama AMD", + "name": "Ollama - AMD", "available": true, "exposable": true, "port": 11434, From df7fa7fd4b05da2050c85a8e709311f21de18ea7 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Sat, 11 May 2024 11:32:02 +0200 Subject: [PATCH 7/7] chore(ollama-amd): small config adjustments --- apps/ollama-amd/docker-compose.yml | 6 +++--- apps/ollama-amd/metadata/description.md | 27 +++++++++++-------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/apps/ollama-amd/docker-compose.yml b/apps/ollama-amd/docker-compose.yml index c69bd5c4..de618415 100755 --- a/apps/ollama-amd/docker-compose.yml +++ b/apps/ollama-amd/docker-compose.yml @@ -12,10 +12,10 @@ services: networks: - tipi_main_network volumes: - - ${APP_DATA_DIR}/.ollama:/root/.ollama - devices: + - ${APP_DATA_DIR}/data/.ollama:/root/.ollama + devices: # Attach GPU - - /dev/kfd + - /dev/kfd - /dev/dri labels: # Main diff --git a/apps/ollama-amd/metadata/description.md b/apps/ollama-amd/metadata/description.md index b7773c0d..9e27958c 100755 --- a/apps/ollama-amd/metadata/description.md +++ b/apps/ollama-amd/metadata/description.md @@ -1,11 +1,9 @@ -# Ollama AMD -[Ollama](https://github.com/ollama/ollama) allows you to run open-source large language models, such as Llama3 and Mistral, locally. Ollama bundles model weights, configuration, and data into a single package, defined by a Modelfile. - ---- - ## Usage +⚠️ This app runs on port **11434**. Take this into account when configuring tools connecting to the app. + ### Use with a frontend + - [LobeChat](https://github.com/lobehub/lobe-chat) - [LibreChat](https://github.com/danny-avila/LibreChat) - [OpenWebUI](https://github.com/open-webui/open-webui) @@ -14,9 +12,11 @@ --- ### Try the REST API + Ollama has a REST API for running and managing models. **Generate a response** + ```sh curl http://localhost:11434/api/generate -d '{ "model": "llama3", @@ -25,6 +25,7 @@ curl http://localhost:11434/api/generate -d '{ ``` **Chat with a model** + ```sh curl http://localhost:11434/api/chat -d '{ "model": "llama3", @@ -33,26 +34,22 @@ curl http://localhost:11434/api/chat -d '{ ] }' ``` ---- - -### Try in terminal -```sh -docker exec -it ollama ollama run llama3 -``` --- ## Compatible GPUs + Ollama supports the following AMD GPUs: -| Family | Cards and accelerators | +| Family | Cards and accelerators | | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -| AMD Radeon RX | `7900 XTX` `7900 XT` `7900 GRE` `7800 XT` `7700 XT` `7600 XT` `7600` `6950 XT` `6900 XTX` `6900XT` `6800 XT` `6800` `Vega 64` `Vega 56` | +| AMD Radeon RX | `7900 XTX` `7900 XT` `7900 GRE` `7800 XT` `7700 XT` `7600 XT` `7600` `6950 XT` `6900 XTX` `6900XT` `6800 XT` `6800` `Vega 64` `Vega 56` | | AMD Radeon PRO | `W7900` `W7800` `W7700` `W7600` `W7500` `W6900X` `W6800X Duo` `W6800X` `W6800` `V620` `V420` `V340` `V320` `Vega II Duo` `Vega II` `VII` `SSG` | -| AMD Instinct | `MI300X` `MI300A` `MI300` `MI250X` `MI250` `MI210` `MI200` `MI100` `MI60` `MI50` | +| AMD Instinct | `MI300X` `MI300A` `MI300` `MI250X` `MI250` `MI210` `MI200` `MI100` `MI60` `MI50` | --- ## Model library + Ollama supports a list of models available on [ollama.com/library](https://ollama.com/library 'ollama model library') Here are some example models that can be downloaded: @@ -72,4 +69,4 @@ Here are some example models that can be downloaded: | Gemma | 7B | 4.8GB | `ollama run gemma:7b` | | Solar | 10.7B | 6.1GB | `ollama run solar` | -> Note: You should have at least 8 GB of RAM available to run the 7B models, 16 GB to run the 13B models, and 32 GB to run the 33B models. \ No newline at end of file +> Note: You should have at least 8 GB of RAM available to run the 7B models, 16 GB to run the 13B models, and 32 GB to run the 33B models.