Skip to content

Commit

Permalink
feat: add support for Furiosa RNGD accelerator (#2776)
Browse files Browse the repository at this point in the history
Follow-up of #1702.

This PR makes Furiosa RNGD accelerator to work with Backend.AI WebUI.

Ref: https://furiosa.ai/rngd
  • Loading branch information
rapsealk committed Oct 28, 2024
1 parent b28d645 commit 80bd516
Show file tree
Hide file tree
Showing 42 changed files with 724 additions and 131 deletions.
1 change: 1 addition & 0 deletions .cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"OPENBLAS",
"Popconfirm",
"preopen",
"RNGD",
"shmem",
"superadmin",
"vfolder",
Expand Down
1 change: 1 addition & 0 deletions config.toml.sample
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ maxATOMDevicesPerContainer = 8 # Maximum ATOM devices per container.
maxATOMPLUSDevicesPerContainer = 8 # Maximum ATOM_PLUS devices per container.
maxGaudi2DevicesPerContainer = 8 # Maximum Gaudi 2 devices per container.
maxWarboyDevicesPerContainer = 8 # Maximum Warboy devices per container.
maxRNGDDevicesPerContainer = 8 # Maximum RNGD devices per container.
maxHyperaccelLPUDevicesPerContainer = 8 # Maximum Hyperaccel LPU devices per container.
maxShmPerContainer = 16 # Maximum shared memory per container.
maxFileUploadSize = 4294967296 # Maximum size of single file upload. Set to -1 for unlimited upload.
Expand Down
1 change: 0 additions & 1 deletion react/src/components/ContainerRegistryEditorModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,6 @@ const ContainerRegistryEditorModal: React.FC<
>
<Input
disabled={!!containerRegistry}
// placeholder={t('registry.registry_name')}
value={containerRegistry?.registry_name || undefined}
/>
</Form.Item>
Expand Down
1 change: 1 addition & 0 deletions react/src/components/ResourceNumber.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ export const ResourceTypeIcon: React.FC<AccTypeIconProps> = ({
'atom-plus.device': '/resources/icons/rebel.svg',
'gaudi2.device': '/resources/icons/gaudi.svg',
'warboy.device': '/resources/icons/furiosa.svg',
'rngd.device': '/resources/icons/furiosa.svg',
'hyperaccel-lpu.device': '/resources/icons/npu_generic.svg',
};

Expand Down
1 change: 1 addition & 0 deletions react/src/hooks/backendai.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export const knownAcceleratorResourceSlotNames = [
'atom-plus.device',
'gaudi2.device',
'warboy.device',
'rngd.device',
'hyperaccel-lpu.device',
] as const;
export type KnownAcceleratorResourceSlotName =
Expand Down
1 change: 1 addition & 0 deletions react/src/hooks/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,7 @@ type BackendAIConfig = {
maxATOMPlusDevicesPerContainer: number;
maxGaudi2DevicesPerContainer: number;
maxWarboyDevicesPerContainer: number;
maxRNGDDevicesPerContainer: number;
maxShmPerContainer: number;
maxFileUploadSize: number;
allow_image_list: string[];
Expand Down
4 changes: 3 additions & 1 deletion react/src/hooks/useResourceLimitAndRemaining.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { isMatchingMaxPerContainer } from './useResourceLimitAndRemaining';
import exp from 'constants';

describe('getConfigName', () => {
test('should match unknown devices', () => {
Expand Down Expand Up @@ -39,6 +38,9 @@ describe('getConfigName', () => {
'warboy.device',
),
).toBe(true);
expect(
isMatchingMaxPerContainer('maxRNGDDevicesPerContainer', 'rngd.device'),
).toBe(true);
expect(
isMatchingMaxPerContainer(
'maxHyperaccelLPUDevicesPerContainer',
Expand Down
11 changes: 11 additions & 0 deletions resources/device_metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,17 @@
},
"display_icon": "furiosa"
},
"rngd.device": {
"slot_name": "rngd.device",
"description": "Furiosa RNGD",
"human_readable_name": "RNGD Device",
"display_unit": "RNGD",
"number_format": {
"binary": false,
"round_length": 0
},
"display_icon": "furiosa"
},
"hyperaccel-lpu.device": {
"slot_name": "hyperaccel-lpu.device",
"description": "Hyperaccel LPU",
Expand Down
21 changes: 15 additions & 6 deletions resources/i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@
"UNAUTHORIZEDACCESS": "Unautorisierter Zugriff",
"AdminOnlyPage": "Sie sind nicht berechtigt, auf diese Seite zuzugreifen. <br /> Klicken Sie auf die Schaltfläche unten, um zur Übersichtsseite weiterzuleiten.",
"CleanUpLoginSession": "Anmeldesitzung bereinigen...",
"CleanUpNow": "Räum jetzt auf..."
"CleanUpNow": "Räum jetzt auf...",
"NetworkSoftTimeout": "Der Server braucht länger, um zu antworten. Bitte warten Sie einen Moment"
},
"summary": {
"StartMenu": "Startmenü",
Expand Down Expand Up @@ -117,7 +118,8 @@
"DownloadWebUIApp": "Backend.AI Web UI App herunterladen",
"FastTrack": "FastTrack",
"HyperaccelLPUEnabled": "Hyperaccel-LPU aktiviert",
"ATOMPlusEnabled": "ATOM+ NPU aktiviert"
"ATOMPlusEnabled": "ATOM+ NPU aktiviert",
"RNGDEnabled": "RNGD aktiviert"
},
"session": {
"launcher": {
Expand Down Expand Up @@ -280,7 +282,8 @@
"DuplicatedPort": "Es gibt doppelte Anschlüsse.",
"FolderAliasOverlappingToAutoMount": "Es existiert ein Auto-Mount-Ordner mit demselben Namen.",
"InsufficientAllocationOfResourcesWarning": "Die zuweisbaren Ressourcen liegen unter der im ausgewählten Bild erforderlichen Mindestressource.",
"RecentHistory": "Jüngere Geschichte"
"RecentHistory": "Jüngere Geschichte",
"CreatedAt": "Erstellt am"
},
"Preparing": "Vorbereitung...",
"PreparingSession": "Sitzung vorbereiten...",
Expand Down Expand Up @@ -892,7 +895,9 @@
"NoImagesAreSelected": "Es sind keine Bilder ausgewählt",
"AlreadyInstalledImage": "Bereits installiertes Bild",
"CheckImageInstallation": "Installieren Sie ein Image?",
"InstalledImagesAreExcluded": "Installierte Bilder sind davon ausgenommen."
"InstalledImagesAreExcluded": "Installierte Bilder sind davon ausgenommen.",
"DescDownloadImage": "__NOT_TRANSLATED__",
"DescSignificantDownloadTime": "__NOT_TRANSLATED__"
},
"resourcePreset": {
"ResourcePresets": "Ressourcenvoreinstellungen",
Expand Down Expand Up @@ -1294,7 +1299,10 @@
"DescGaudi2Support": "Verwenden Sie den Intel Gaudi 2-Beschleuniger",
"ATOMPlusSupport": "ATOM+ Unterstützung",
"RequireATOMPlusPlugin": "Erfordert das Backend.AI ATOM+ Plugin.",
"DescATOMPlusSupport": "Benutzen Sie den ATOM+ Beschleuniger von Rebellions."
"DescATOMPlusSupport": "Benutzen Sie den ATOM+ Beschleuniger von Rebellions.",
"RNGDsupport": "RNGD",
"DescRNGDsupport": "Nutzen Sie die Furiosa RNGD-Unterstützung",
"RequireRNGDPlugin": "Erfordert das Backend.AI RNGD-Plugin."
},
"notification": {
"SuccessfullyUpdated": "Erfolgreich aktualisiert",
Expand Down Expand Up @@ -1525,7 +1533,8 @@
"255chars": "(maximal 255 Zeichen)",
"500chars": "(maximal 500 Zeichen)",
"512chars": "(maximal 512 Zeichen)",
"2048chars": "(maximal 2048 Zeichen)"
"2048chars": "(maximal 2048 Zeichen)",
"50chars": "(maximal 50 Zeichen)"
},
"explorer": {
"ValueRequired": "WertErforderlich",
Expand Down
21 changes: 15 additions & 6 deletions resources/i18n/el.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@
"UNAUTHORIZEDACCESS": "Μη εξουσιοδοτημένη πρόσβαση",
"AdminOnlyPage": "Δεν έχετε άδεια πρόσβασης σε αυτήν τη σελίδα. <br /> Κάντε κλικ στο κουμπί παρακάτω για ανακατεύθυνση στη σελίδα περίληψης.",
"CleanUpLoginSession": "Εκκαθάριση περιόδου σύνδεσης ...",
"CleanUpNow": "Καθαρίστε τώρα ..."
"CleanUpNow": "Καθαρίστε τώρα ...",
"NetworkSoftTimeout": "Ο διακομιστής χρειάζεται περισσότερο χρόνο για να ανταποκριθεί. Παρακαλώ περιμένετε λίγο"
},
"summary": {
"StartMenu": "Αρχικο ΜΕΝΟΥ",
Expand Down Expand Up @@ -117,7 +118,8 @@
"DownloadWebUIApp": "Κατεβάστε την εφαρμογή Backend.AI Web UI App",
"FastTrack": "FastTrack",
"HyperaccelLPUEnabled": "Hyperaccel LPU Enabled",
"ATOMPlusEnabled": "Ενεργοποιημένο ATOM+ NPU"
"ATOMPlusEnabled": "Ενεργοποιημένο ATOM+ NPU",
"RNGDEnabled": "Ενεργοποιημένο RNGD"
},
"session": {
"launcher": {
Expand Down Expand Up @@ -280,7 +282,8 @@
"DuplicatedPort": "Υπάρχουν διπλές θύρες.",
"FolderAliasOverlappingToAutoMount": "Υπάρχει ένας φάκελος αυτόματης προσάρτησης με το ίδιο όνομα.",
"InsufficientAllocationOfResourcesWarning": "Οι κατανεμητέοι πόροι πέφτουν κάτω από τον ελάχιστο απαιτούμενο πόρο στην επιλεγμένη εικόνα.",
"RecentHistory": "Πρόσφατη ιστορία"
"RecentHistory": "Πρόσφατη ιστορία",
"CreatedAt": "Δημιουργήθηκε στο"
},
"Preparing": "Προετοιμασία ...",
"PreparingSession": "Προετοιμασία συνεδρίας ...",
Expand Down Expand Up @@ -892,7 +895,9 @@
"NoImagesAreSelected": "Δεν έχουν επιλεγεί εικόνες",
"AlreadyInstalledImage": "Ήδη εγκατεστημένη εικόνα",
"CheckImageInstallation": "Εγκαθιστώντας μια εικόνα;",
"InstalledImagesAreExcluded": "Οι εγκατεστημένες εικόνες εξαιρούνται."
"InstalledImagesAreExcluded": "Οι εγκατεστημένες εικόνες εξαιρούνται.",
"DescDownloadImage": "__NOT_TRANSLATED__",
"DescSignificantDownloadTime": "__NOT_TRANSLATED__"
},
"resourcePreset": {
"ResourcePresets": "Προεπιλογές πόρων",
Expand Down Expand Up @@ -1294,7 +1299,10 @@
"DescGaudi2Support": "Χρησιμοποιήστε τον επιταχυντή intel Gaudi 2",
"ATOMPlusSupport": "Υποστήριξη ATOM+",
"RequireATOMPlusPlugin": "Απαιτεί πρόσθετο Backend.AI ATOM+.",
"DescATOMPlusSupport": "Χρησιμοποιήστε τον επιταχυντή Rebellions ATOM+."
"DescATOMPlusSupport": "Χρησιμοποιήστε τον επιταχυντή Rebellions ATOM+.",
"RNGDsupport": "RNGD",
"DescRNGDsupport": "Χρησιμοποιήστε την υποστήριξη Furiosa RNGD",
"RequireRNGDPlugin": "Απαιτεί το πρόσθετο Backend.AI RNGD."
},
"notification": {
"SuccessfullyUpdated": "Ενημερώθηκε με επιτυχία",
Expand Down Expand Up @@ -1525,7 +1533,8 @@
"255chars": "(έως 255 χαρακτήρες)",
"500chars": "(έως 500 χαρακτήρες)",
"512chars": "(έως 512 χαρακτήρες)",
"2048chars": "(έως 2048 χαρακτήρες)"
"2048chars": "(έως 2048 χαρακτήρες)",
"50chars": "(μέγιστο 50 χαρακτήρες)"
},
"explorer": {
"ValueRequired": "Απαιτούμενη τιμή",
Expand Down
21 changes: 15 additions & 6 deletions resources/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@
"UNAUTHORIZEDACCESS": "Unauthorized Access",
"AdminOnlyPage": "You don't have permission to access this page.<br />Click the button below to redirect to summary page.",
"CleanUpLoginSession": "Clean up login session...",
"CleanUpNow": "Clean up now..."
"CleanUpNow": "Clean up now...",
"NetworkSoftTimeout": "The server is taking longer to respond. Please wait a moment"
},
"totp": {
"ScanQRToEnable": "Scan QR code with your authenticator to start setting up two-factor authentication.",
Expand Down Expand Up @@ -130,7 +131,8 @@
"WarboyEnabled": "Warboy NPU Enabled",
"FastTrack": "FastTrack",
"HyperaccelLPUEnabled": "Hyperaccel LPU Enabled",
"ATOMPlusEnabled": "ATOM+ NPU Enabled"
"ATOMPlusEnabled": "ATOM+ NPU Enabled",
"RNGDEnabled": "RNGD Enabled"
},
"session": {
"launcher": {
Expand Down Expand Up @@ -294,7 +296,8 @@
"DuplicatedPort": "There are duplicate ports.",
"FolderAliasOverlappingToAutoMount": "An auto-mount folder with the same name exists.",
"InsufficientAllocationOfResourcesWarning": "Allocatable resources falls below the minimum resource required in the selected image.",
"RecentHistory": "Recent History"
"RecentHistory": "Recent History",
"CreatedAt": "CreatedAt"
},
"Preparing": "Preparing...",
"PreparingSession": "Preparing session...",
Expand Down Expand Up @@ -1022,7 +1025,9 @@
"AlreadyInstalledImage": "Already installed image",
"InstalledImagesAreExcluded": "Installed images are excluded.",
"CheckImageInstallation": "Installing an image?",
"SearchImages": "Search images"
"SearchImages": "Search images",
"DescDownloadImage": "DescDownloadImage",
"DescSignificantDownloadTime": "DescSignificantDownloadTime"
},
"resourcePreset": {
"ResourcePresets": "Resource Presets",
Expand Down Expand Up @@ -1424,7 +1429,10 @@
"DescGaudi2Support": "Use intel Gaudi2 accelerator",
"ATOMPlusSupport": "ATOM+ Support",
"RequireATOMPlusPlugin": "Requires Backend.AI ATOM+ Plugin.",
"DescATOMPlusSupport": "Use Rebellions ATOM+ accelerator."
"DescATOMPlusSupport": "Use Rebellions ATOM+ accelerator.",
"RNGDsupport": "RNGD",
"DescRNGDsupport": "Use Furiosa RNGD support",
"RequireRNGDPlugin": "Requires Backend.AI RNGD Plugin."
},
"notification": {
"SuccessfullyUpdated": "Successfully Updated",
Expand Down Expand Up @@ -1657,7 +1665,8 @@
"255chars": "(maximum 255 chars)",
"500chars": "(maximum 500 chars)",
"512chars": "(maximum 512 chars)",
"2048chars": "(maximum 2048 chars)"
"2048chars": "(maximum 2048 chars)",
"50chars": "(maximum 50 chars)"
},
"inputLimit": {
"4to32chars": "(4~32 chars)",
Expand Down
21 changes: 15 additions & 6 deletions resources/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
"connectingToCluster": "Conectando al Cluster Backend.AI...",
"reserved": "reservado",
"HyperaccelLPUEnabled": "LPU de hiperaccel habilitada",
"ATOMPlusEnabled": "NPU ATOM+ habilitada"
"ATOMPlusEnabled": "NPU ATOM+ habilitada",
"RNGDEnabled": "RNGN habilitado"
},
"error": {
"WrongAPIServerAddress": "Dirección del servidor API incorrecta.",
Expand Down Expand Up @@ -533,7 +534,9 @@
"NoImagesAreSelected": "No hay imágenes seleccionadas",
"AlreadyInstalledImage": "Imagen ya instalada",
"CheckImageInstallation": "¿Instalar una imagen?",
"InstalledImagesAreExcluded": "Se excluyen las imágenes instaladas."
"InstalledImagesAreExcluded": "Se excluyen las imágenes instaladas.",
"DescDownloadImage": "__NOT_TRANSLATED__",
"DescSignificantDownloadTime": "__NOT_TRANSLATED__"
},
"explorer": {
"InputTooShort": "InputTooShort",
Expand Down Expand Up @@ -760,7 +763,8 @@
"255chars": "(máximo 255 caracteres)",
"500chars": "(máximo 500 caracteres)",
"512chars": "(máximo 512 caracteres)",
"64chars": "(máximo 64 caracteres)"
"64chars": "(máximo 64 caracteres)",
"50chars": "(máximo 50 caracteres)"
},
"modelService": {
"Active/Total": "Activo/Total",
Expand Down Expand Up @@ -1310,7 +1314,8 @@
"DuplicatedPort": "Hay puertos duplicados.",
"FolderAliasOverlappingToAutoMount": "Existe una carpeta de montaje automático con el mismo nombre.",
"InsufficientAllocationOfResourcesWarning": "Los recursos asignables están por debajo del recurso mínimo requerido en la imagen seleccionada.",
"RecentHistory": "Historia reciente"
"RecentHistory": "Historia reciente",
"CreatedAt": "Creado en"
},
"ExpiresAfter": "Tiempo restante",
"CPU": "CPU",
Expand Down Expand Up @@ -1405,7 +1410,10 @@
"DescGaudi2Support": "Utilice el acelerador Intel Gaudí 2",
"ATOMPlusSupport": "Soporte ATOM+",
"RequireATOMPlusPlugin": "Requiere el complemento Backend.AI ATOM+.",
"DescATOMPlusSupport": "Usa el acelerador ATOM+ de Rebellions."
"DescATOMPlusSupport": "Usa el acelerador ATOM+ de Rebellions.",
"RNGDsupport": "RNGD",
"DescRNGDsupport": "Utilice el soporte Furiosa RNGD",
"RequireRNGDPlugin": "Requiere el complemento Backend.AI RNGD."
},
"sidepanel": {
"BackgroundTasks": "Tareas en curso",
Expand Down Expand Up @@ -1669,7 +1677,8 @@
"DisMatchUserEmail": "El correo electrónico del usuario no coincide",
"MyEnvironments": "Mis ambientes",
"ResourcePolicy": "Política de recursos"
}
},
"NetworkSoftTimeout": "El servidor está tardando más en responder. Por favor, espere un momento"
},
"modelStore": {
"Description": "Descripción",
Expand Down
21 changes: 15 additions & 6 deletions resources/i18n/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
"connectingToCluster": "Yhteyden muodostaminen Backend.AI-klusteriin...",
"reserved": "varattu",
"HyperaccelLPUEnabled": "Hyperaccel LPU käytössä",
"ATOMPlusEnabled": "ATOM+ NPU käytössä"
"ATOMPlusEnabled": "ATOM+ NPU käytössä",
"RNGDEnabled": "RNGD käytössä"
},
"error": {
"WrongAPIServerAddress": "Väärä API-palvelimen osoite.",
Expand Down Expand Up @@ -533,7 +534,9 @@
"NoImagesAreSelected": "Kuvia ei ole valittu",
"AlreadyInstalledImage": "Jo asennettu kuva",
"CheckImageInstallation": "Kuvan asentaminen?",
"InstalledImagesAreExcluded": "Asennettuja kuvia ei oteta huomioon."
"InstalledImagesAreExcluded": "Asennettuja kuvia ei oteta huomioon.",
"DescDownloadImage": "__NOT_TRANSLATED__",
"DescSignificantDownloadTime": "__NOT_TRANSLATED__"
},
"explorer": {
"InputTooShort": "InputTooShort",
Expand Down Expand Up @@ -758,7 +761,8 @@
"255chars": "(enintään 255 merkkiä)",
"500chars": "(enintään 500 merkkiä)",
"512chars": "(enintään 512 merkkiä)",
"64chars": "(enintään 64 merkkiä)"
"64chars": "(enintään 64 merkkiä)",
"50chars": "(enintään 50 merkkiä)"
},
"modelService": {
"Active/Total": "Aktiivinen/Kokonaismäärä",
Expand Down Expand Up @@ -1307,7 +1311,8 @@
"DuplicatedPort": "Portteja on päällekkäin.",
"FolderAliasOverlappingToAutoMount": "Samanniminen automaattinen kiinnityskansio on olemassa.",
"InsufficientAllocationOfResourcesWarning": "Allokoitavat resurssit jäävät alle valitussa kuvassa vaaditun vähimmäisresurssin.",
"RecentHistory": "Lähihistoria"
"RecentHistory": "Lähihistoria",
"CreatedAt": "LuotuAt"
},
"ExpiresAfter": "Jäljellä oleva aika",
"CPU": "CPU",
Expand Down Expand Up @@ -1402,7 +1407,10 @@
"DescGaudi2Support": "Käytä Intel Gaudi 2 -kiihdytintä",
"ATOMPlusSupport": "ATOM+-tuki",
"RequireATOMPlusPlugin": "Vaatii Backend.AI ATOM+ laajennuksen.",
"DescATOMPlusSupport": "Käytä Rebellions ATOM+ -kiihdytintä."
"DescATOMPlusSupport": "Käytä Rebellions ATOM+ -kiihdytintä.",
"RNGDsupport": "RNGD",
"DescRNGDsupport": "Käytä Furiosa RNGD -tukea",
"RequireRNGDPlugin": "Vaatii Backend.AI RNGD -laajennuksen."
},
"sidepanel": {
"BackgroundTasks": "Tehtävien suorittaminen",
Expand Down Expand Up @@ -1666,7 +1674,8 @@
"DisMatchUserEmail": "Käyttäjän sähköpostiosoite ei täsmää",
"MyEnvironments": "Omat ympäristöt",
"ResourcePolicy": "Resurssipolitiikka"
}
},
"NetworkSoftTimeout": "Palvelimen vastaus kestää kauemmin. Odota hetki"
},
"modelStore": {
"category": "Kategoria",
Expand Down
Loading

0 comments on commit 80bd516

Please sign in to comment.