From 6350715250bb25e8e0e1fa2c4dd4044633b5bbe0 Mon Sep 17 00:00:00 2001 From: Xstar97TheNoob <9399967+xstar97@users.noreply.github.com> Date: Thu, 1 Jun 2023 16:53:07 -0400 Subject: [PATCH] feat(whisper-asr-webservice) add whisper-asr-webservice (#9198) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Description** ⚒️ Fixes # **⚙️ Type of change** - [X] ⚙️ Feature/App addition - [ ] 🪛 Bugfix - [ ] ⚠️ Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] 🔃 Refactor of current code **🧪 How Has This Been Tested?** **📃 Notes:** **✔️ Checklist:** - [X] ⚖️ My code follows the style guidelines of this project - [X] 👀 I have performed a self-review of my own code - [ ] #️⃣ I have commented my code, particularly in hard-to-understand areas - [ ] 📄 I have made corresponding changes to the documentation - [ ] ⚠️ My changes generate no new warnings - [ ] 🧪 I have added tests to this description that prove my fix is effective or that my feature works - [ ] ⬆️ I increased versions for any altered app according to semantic versioning **➕ App addition** If this PR is an app addition please make sure you have done the following. - [X] 🪞 I have opened a PR on [truecharts/containers](https://github.com/truecharts/containers) adding the container to TrueCharts mirror repo. - [X] 🖼️ I have added an icon in the Chart's root directory called `icon.png` --- _Please don't blindly check all the boxes. Read them and only check those that apply. Those checkboxes are there for the reviewer to see what is this all about and the status of this PR with a quick glance._ --------- Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Co-authored-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com> --- .../whisper-asr-webservice/.helmignore | 30 ++++ .../whisper-asr-webservice/CHANGELOG.md | 1 + .../whisper-asr-webservice/Chart.yaml | 28 +++ .../whisper-asr-webservice/README.md | 1 + .../docs/installation_notes.md | 37 ++++ .../incubator/whisper-asr-webservice/icon.png | Bin 0 -> 54578 bytes .../whisper-asr-webservice/questions.yaml | 162 ++++++++++++++++++ .../templates/NOTES.txt | 1 + .../templates/common.yaml | 1 + .../whisper-asr-webservice/values.yaml | 61 +++++++ 10 files changed, 322 insertions(+) create mode 100644 charts/incubator/whisper-asr-webservice/.helmignore create mode 100644 charts/incubator/whisper-asr-webservice/CHANGELOG.md create mode 100644 charts/incubator/whisper-asr-webservice/Chart.yaml create mode 100644 charts/incubator/whisper-asr-webservice/README.md create mode 100644 charts/incubator/whisper-asr-webservice/docs/installation_notes.md create mode 100644 charts/incubator/whisper-asr-webservice/icon.png create mode 100644 charts/incubator/whisper-asr-webservice/questions.yaml create mode 100644 charts/incubator/whisper-asr-webservice/templates/NOTES.txt create mode 100644 charts/incubator/whisper-asr-webservice/templates/common.yaml create mode 100644 charts/incubator/whisper-asr-webservice/values.yaml diff --git a/charts/incubator/whisper-asr-webservice/.helmignore b/charts/incubator/whisper-asr-webservice/.helmignore new file mode 100644 index 00000000000..77ca5567b26 --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/charts/incubator/whisper-asr-webservice/CHANGELOG.md b/charts/incubator/whisper-asr-webservice/CHANGELOG.md new file mode 100644 index 00000000000..825c32f0d03 --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog diff --git a/charts/incubator/whisper-asr-webservice/Chart.yaml b/charts/incubator/whisper-asr-webservice/Chart.yaml new file mode 100644 index 00000000000..628542d11c9 --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/Chart.yaml @@ -0,0 +1,28 @@ +apiVersion: v2 +appVersion: "1.1.0" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 12.10.4 +deprecated: false +description: Whisper is a general-purpose speech recognition model. +home: https://truecharts.org/charts/incubator/whisper-asr-webservice +icon: https://truecharts.org/img/hotlink-ok/chart-icons/whisper-asr-webservice.png +keywords: + - whisper-asr-webservice + - machine-learning +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: whisper-asr-webservice +sources: + - https://github.com/truecharts/charts/tree/master/charts/incubator/whisper-asr-webservice + - https://github.com/ahmetoner/whisper-asr-webservice +type: application +version: 0.0.1 +annotations: + truecharts.org/catagories: | + - machine-learning + truecharts.org/SCALE-support: "true" diff --git a/charts/incubator/whisper-asr-webservice/README.md b/charts/incubator/whisper-asr-webservice/README.md new file mode 100644 index 00000000000..7e59600739c --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/README.md @@ -0,0 +1 @@ +# README diff --git a/charts/incubator/whisper-asr-webservice/docs/installation_notes.md b/charts/incubator/whisper-asr-webservice/docs/installation_notes.md new file mode 100644 index 00000000000..8c88eb89e17 --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/docs/installation_notes.md @@ -0,0 +1,37 @@ +# Installation Notes + +A quick run down on the options available for **whisper-asr-webservice**. + +The main service runs a Interactive Swagger API documentation is available at + +## Models + +The **ASR Model** has the following values: + +| Model | Required VRAM | Relative speed | +|---------|--------------|----------------| +| tiny | ~1 GB | ~32x | +| base | ~1 GB | ~16x | +| small | ~2 GB | ~6x | +| medium | ~5 GB | ~2x | +| large | ~10 GB | ~1x | + +Default is **Base**. + +## Engines + +The **ASR Engine** is default to **Faster Whisper**, explained [here](https://github.com/guillaumekln/faster-whisper#faster-whisper-transcription-with-ctranslate2). + +A list of Engines available. + +| Engines | +|--------------------| +| Faster Whisper | +| OpenAI Whisper | + +## Cache + +> The ASR model is downloaded each time you start the container, using the large model this can take some time. If you want to decrease the time it takes to start your container by skipping the download, you can store the cache directory (/root/.cache/whisper) to an persistent storage. Next time you start your container the ASR Model will be taken from the cache instead of being downloaded again. +Important this will prevent you from receiving any updates to the models. + +You can set the pre-persisted mount **whisper** as emptyDir and set it as default or memory if you have the ram for it. diff --git a/charts/incubator/whisper-asr-webservice/icon.png b/charts/incubator/whisper-asr-webservice/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b6577cb89af0227a69a0b68dbed5dad302ec1fe9 GIT binary patch literal 54578 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

y>CQsu&Gm6z@DXbMffQh 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 literal 0 HcmV?d00001 diff --git a/charts/incubator/whisper-asr-webservice/questions.yaml b/charts/incubator/whisper-asr-webservice/questions.yaml new file mode 100644 index 00000000000..16d6036643e --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/questions.yaml @@ -0,0 +1,162 @@ +# Include{groups} +portals: + open: +# Include{portalLink} +questions: +# Include{global} +# Include{workload} +# Include{workloadDeployment} + +# Include{replicas1} +# Include{podSpec} +# Include{containerMain} + - variable: imageSelector + label: Select Image + schema: + type: string + default: image + enum: + - value: image + description: CPU + - value: gpuImage + description: GPU + + - variable: env + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: ASR_MODEL + label: ASR Model + schema: + type: string + required: true + default: base + enum: + - value: tiny + description: Tiny + - value: base + description: Base + - value: small + description: Small + - value: medium + description: Medium + - value: large + description: Large + - value: large-v1 + description: Large V1 + - value: large-v2 + description: Large V2 + - variable: ASR_ENGINE + label: ASR Engine + schema: + type: string + required: true + default: faster_whisper + enum: + - value: openai_whisper + description: OpenAI Whisper + - value: faster_whisper + description: Faster Whisper +# Include{containerBasic} +# Include{containerAdvanced} + +# Include{containerConfig} +# Include{podOptions} +# Include{serviceRoot} +# Include{serviceMain} +# Include{serviceSelectorLoadBalancer} +# Include{serviceSelectorExtras} + - variable: main + label: "Main Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 19900 + required: true +# Include{serviceExpertRoot} +# Include{serviceExpert} +# Include{serviceList} +# Include{persistenceRoot} + - variable: pip + label: "App Pip Storage" + description: "Stores the Application Pip." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} + - variable: poetry + label: "App Poetry Storage" + description: "Stores the Application Poetry." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} + - variable: whisper + label: "App Whisper Storage" + description: "Stores the Application Whisper." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} + - variable: faster-whisper + label: "App Faster Whisper Storage" + description: "Stores the Application Faster Whisper." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} +# Include{persistenceList} +# Include{ingressRoot} + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: +# Include{ingressDefault} +# Include{ingressTLS} +# Include{ingressTraefik} +# Include{ingressList} +# Include{securityContextRoot} + + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID this App of the user running the application" + schema: + type: int + default: 0 +# Include{securityContextContainer} +# Include{securityContextAdvanced} +# Include{securityContextPod} + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + +# Include{resources} +# Include{advanced} +# Include{addons} +# Include{codeserver} +# Include{netshoot} +# Include{vpn} +# Include{documentation} diff --git a/charts/incubator/whisper-asr-webservice/templates/NOTES.txt b/charts/incubator/whisper-asr-webservice/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/charts/incubator/whisper-asr-webservice/templates/common.yaml b/charts/incubator/whisper-asr-webservice/templates/common.yaml new file mode 100644 index 00000000000..b51394e00a4 --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/charts/incubator/whisper-asr-webservice/values.yaml b/charts/incubator/whisper-asr-webservice/values.yaml new file mode 100644 index 00000000000..896db1c04d9 --- /dev/null +++ b/charts/incubator/whisper-asr-webservice/values.yaml @@ -0,0 +1,61 @@ +image: + repository: tccr.io/truecharts/whisper-asr-webservice-cpu + pullPolicy: IfNotPresent + tag: v1.1.0@sha256:d23d734490bb8ae57d19d7c93965f213e9f96fb6f85b10c01f2f10ecec2e19f4 +gpuImage: + repository: tccr.io/truecharts/whisper-asr-webservice-gpu + pullPolicy: IfNotPresent + tag: v1.1.0@sha256:39851411e99bbc02488d994f9d077197d8ef536e251e941006f5e0f65cb55461 + +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 + +workload: + main: + podSpec: + containers: + main: + imageSelector: image + probes: + liveness: + type: http + path: "/docs" + readiness: + type: http + path: "/docs" + startup: + type: http + path: "/docs" + env: + ASR_MODEL: tiny + ASR_ENGINE: faster_whisper + +service: + main: + ports: + main: + protocol: http + targetPort: 9000 + port: 19900 + +persistence: + pip: + enabled: true + mountPath: "/root/.cache/pip" + poetry: + enabled: true + mountPath: "/root/.cache/poetry" + whisper: + enabled: true + mountPath: "/root/.cache/whisper" + faster-whisper: + enabled: true + mountPath: "/root/.cache/faster_whisper" + +portal: + open: + enabled: true