diff --git a/src/pkg/gpuconfig/pb/gpu_driver_versions.pb.go b/src/pkg/gpuconfig/pb/gpu_driver_versions.pb.go
index 180bdef..98c5d57 100644
--- a/src/pkg/gpuconfig/pb/gpu_driver_versions.pb.go
+++ b/src/pkg/gpuconfig/pb/gpu_driver_versions.pb.go
@@ -23,6 +23,51 @@
 	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
 )
 
+// Represents a supported host driver version for vGPU.
+type HostDriverVersion struct {
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Version       string                 `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` // more metadata about host driver versions.
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *HostDriverVersion) Reset() {
+	*x = HostDriverVersion{}
+	mi := &file_gpu_driver_versions_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *HostDriverVersion) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HostDriverVersion) ProtoMessage() {}
+
+func (x *HostDriverVersion) ProtoReflect() protoreflect.Message {
+	mi := &file_gpu_driver_versions_proto_msgTypes[0]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use HostDriverVersion.ProtoReflect.Descriptor instead.
+func (*HostDriverVersion) Descriptor() ([]byte, []int) {
+	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *HostDriverVersion) GetVersion() string {
+	if x != nil {
+		return x.Version
+	}
+	return ""
+}
+
 // Represents all the information about a GPU driver version.
 // It contains the GPU driver version label (e.g., "default", "latest"), and the GPU driver version that is associated with that label.
 type DriverVersion struct {
@@ -30,14 +75,16 @@
 	// GPU driver version label.
 	Label string `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"`
 	// The driver version that is associated with this label.
-	Version       string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` // more metadata about the driver version.
-	unknownFields protoimpl.UnknownFields
-	sizeCache     protoimpl.SizeCache
+	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
+	// List of supported host driver versions for vGPU.
+	SupportedHostVersions []*HostDriverVersion `protobuf:"bytes,3,rep,name=supported_host_versions,json=supportedHostVersions,proto3" json:"supported_host_versions,omitempty"` // more metadata about the driver version.
+	unknownFields         protoimpl.UnknownFields
+	sizeCache             protoimpl.SizeCache
 }
 
 func (x *DriverVersion) Reset() {
 	*x = DriverVersion{}
-	mi := &file_gpu_driver_versions_proto_msgTypes[0]
+	mi := &file_gpu_driver_versions_proto_msgTypes[1]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -49,7 +96,7 @@
 func (*DriverVersion) ProtoMessage() {}
 
 func (x *DriverVersion) ProtoReflect() protoreflect.Message {
-	mi := &file_gpu_driver_versions_proto_msgTypes[0]
+	mi := &file_gpu_driver_versions_proto_msgTypes[1]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -62,7 +109,7 @@
 
 // Deprecated: Use DriverVersion.ProtoReflect.Descriptor instead.
 func (*DriverVersion) Descriptor() ([]byte, []int) {
-	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{0}
+	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{1}
 }
 
 func (x *DriverVersion) GetLabel() string {
@@ -79,6 +126,13 @@
 	return ""
 }
 
+func (x *DriverVersion) GetSupportedHostVersions() []*HostDriverVersion {
+	if x != nil {
+		return x.SupportedHostVersions
+	}
+	return nil
+}
+
 // Represents the information about a GPU device.
 type GPUDevice struct {
 	state protoimpl.MessageState `protogen:"open.v1"`
@@ -92,7 +146,7 @@
 
 func (x *GPUDevice) Reset() {
 	*x = GPUDevice{}
-	mi := &file_gpu_driver_versions_proto_msgTypes[1]
+	mi := &file_gpu_driver_versions_proto_msgTypes[2]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -104,7 +158,7 @@
 func (*GPUDevice) ProtoMessage() {}
 
 func (x *GPUDevice) ProtoReflect() protoreflect.Message {
-	mi := &file_gpu_driver_versions_proto_msgTypes[1]
+	mi := &file_gpu_driver_versions_proto_msgTypes[2]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -117,7 +171,7 @@
 
 // Deprecated: Use GPUDevice.ProtoReflect.Descriptor instead.
 func (*GPUDevice) Descriptor() ([]byte, []int) {
-	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{1}
+	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{2}
 }
 
 func (x *GPUDevice) GetGpuType() string {
@@ -148,7 +202,7 @@
 
 func (x *GPUDriverVersionInfo) Reset() {
 	*x = GPUDriverVersionInfo{}
-	mi := &file_gpu_driver_versions_proto_msgTypes[2]
+	mi := &file_gpu_driver_versions_proto_msgTypes[3]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -160,7 +214,7 @@
 func (*GPUDriverVersionInfo) ProtoMessage() {}
 
 func (x *GPUDriverVersionInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_gpu_driver_versions_proto_msgTypes[2]
+	mi := &file_gpu_driver_versions_proto_msgTypes[3]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -173,7 +227,7 @@
 
 // Deprecated: Use GPUDriverVersionInfo.ProtoReflect.Descriptor instead.
 func (*GPUDriverVersionInfo) Descriptor() ([]byte, []int) {
-	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{2}
+	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{3}
 }
 
 func (x *GPUDriverVersionInfo) GetGpuDevice() *GPUDevice {
@@ -200,7 +254,7 @@
 
 func (x *GPUDriverVersionInfoList) Reset() {
 	*x = GPUDriverVersionInfoList{}
-	mi := &file_gpu_driver_versions_proto_msgTypes[3]
+	mi := &file_gpu_driver_versions_proto_msgTypes[4]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -212,7 +266,7 @@
 func (*GPUDriverVersionInfoList) ProtoMessage() {}
 
 func (x *GPUDriverVersionInfoList) ProtoReflect() protoreflect.Message {
-	mi := &file_gpu_driver_versions_proto_msgTypes[3]
+	mi := &file_gpu_driver_versions_proto_msgTypes[4]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -225,7 +279,7 @@
 
 // Deprecated: Use GPUDriverVersionInfoList.ProtoReflect.Descriptor instead.
 func (*GPUDriverVersionInfoList) Descriptor() ([]byte, []int) {
-	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{3}
+	return file_gpu_driver_versions_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *GPUDriverVersionInfoList) GetGpuDriverVersionInfo() []*GPUDriverVersionInfo {
@@ -239,10 +293,13 @@
 
 const file_gpu_driver_versions_proto_rawDesc = "" +
 	"\n" +
-	"\x19gpu_driver_versions.proto\x12\x02pb\"?\n" +
+	"\x19gpu_driver_versions.proto\x12\x02pb\"-\n" +
+	"\x11HostDriverVersion\x12\x18\n" +
+	"\aversion\x18\x01 \x01(\tR\aversion\"\x8e\x01\n" +
 	"\rDriverVersion\x12\x14\n" +
 	"\x05label\x18\x01 \x01(\tR\x05label\x12\x18\n" +
-	"\aversion\x18\x02 \x01(\tR\aversion\"?\n" +
+	"\aversion\x18\x02 \x01(\tR\aversion\x12M\n" +
+	"\x17supported_host_versions\x18\x03 \x03(\v2\x15.pb.HostDriverVersionR\x15supportedHostVersions\"?\n" +
 	"\tGPUDevice\x12\x19\n" +
 	"\bgpu_type\x18\x01 \x01(\tR\agpuType\x12\x17\n" +
 	"\ais_vgpu\x18\x02 \x01(\bR\x06isVgpu\"\x93\x01\n" +
@@ -265,22 +322,24 @@
 	return file_gpu_driver_versions_proto_rawDescData
 }
 
-var file_gpu_driver_versions_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_gpu_driver_versions_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
 var file_gpu_driver_versions_proto_goTypes = []any{
-	(*DriverVersion)(nil),            // 0: pb.DriverVersion
-	(*GPUDevice)(nil),                // 1: pb.GPUDevice
-	(*GPUDriverVersionInfo)(nil),     // 2: pb.GPUDriverVersionInfo
-	(*GPUDriverVersionInfoList)(nil), // 3: pb.GPUDriverVersionInfoList
+	(*HostDriverVersion)(nil),        // 0: pb.HostDriverVersion
+	(*DriverVersion)(nil),            // 1: pb.DriverVersion
+	(*GPUDevice)(nil),                // 2: pb.GPUDevice
+	(*GPUDriverVersionInfo)(nil),     // 3: pb.GPUDriverVersionInfo
+	(*GPUDriverVersionInfoList)(nil), // 4: pb.GPUDriverVersionInfoList
 }
 var file_gpu_driver_versions_proto_depIdxs = []int32{
-	1, // 0: pb.GPUDriverVersionInfo.gpu_device:type_name -> pb.GPUDevice
-	0, // 1: pb.GPUDriverVersionInfo.supported_driver_versions:type_name -> pb.DriverVersion
-	2, // 2: pb.GPUDriverVersionInfoList.gpu_driver_version_info:type_name -> pb.GPUDriverVersionInfo
-	3, // [3:3] is the sub-list for method output_type
-	3, // [3:3] is the sub-list for method input_type
-	3, // [3:3] is the sub-list for extension type_name
-	3, // [3:3] is the sub-list for extension extendee
-	0, // [0:3] is the sub-list for field type_name
+	0, // 0: pb.DriverVersion.supported_host_versions:type_name -> pb.HostDriverVersion
+	2, // 1: pb.GPUDriverVersionInfo.gpu_device:type_name -> pb.GPUDevice
+	1, // 2: pb.GPUDriverVersionInfo.supported_driver_versions:type_name -> pb.DriverVersion
+	3, // 3: pb.GPUDriverVersionInfoList.gpu_driver_version_info:type_name -> pb.GPUDriverVersionInfo
+	4, // [4:4] is the sub-list for method output_type
+	4, // [4:4] is the sub-list for method input_type
+	4, // [4:4] is the sub-list for extension type_name
+	4, // [4:4] is the sub-list for extension extendee
+	0, // [0:4] is the sub-list for field type_name
 }
 
 func init() { file_gpu_driver_versions_proto_init() }
@@ -294,7 +353,7 @@
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_gpu_driver_versions_proto_rawDesc), len(file_gpu_driver_versions_proto_rawDesc)),
 			NumEnums:      0,
-			NumMessages:   4,
+			NumMessages:   5,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/src/pkg/gpuconfig/proto/gpu_driver_versions.proto b/src/pkg/gpuconfig/proto/gpu_driver_versions.proto
index d11c924..1fbc179 100644
--- a/src/pkg/gpuconfig/proto/gpu_driver_versions.proto
+++ b/src/pkg/gpuconfig/proto/gpu_driver_versions.proto
@@ -5,6 +5,12 @@
 
 option go_package = ".;pb";
 
+// Represents a supported host driver version for vGPU.
+message HostDriverVersion {
+  string version = 1;
+  // more metadata about host driver versions.
+}
+
 // Represents all the information about a GPU driver version.
 // It contains the GPU driver version label (e.g., "default", "latest"), and the GPU driver version that is associated with that label.
 message DriverVersion {
@@ -12,6 +18,8 @@
   string label = 1;
   // The driver version that is associated with this label.
   string version = 2;
+  // List of supported host driver versions for vGPU.
+  repeated HostDriverVersion supported_host_versions = 3;
   // more metadata about the driver version.
 }
 
