use super::super::arg_value;
use super::{GpuLayerConfig, ModelLoadMode, ModelPlacementConfig, SplitMode};
use crate::defaults::BYTES_PER_MIB_U64;
#[test]
fn gpu_layer_count_matches_llama_negative_all_convention() {
assert_eq!(GpuLayerConfig::from_layer_count(-1), GpuLayerConfig::All);
assert_eq!(
GpuLayerConfig::from_layer_count(0),
GpuLayerConfig::Count(0)
);
assert_eq!(
GpuLayerConfig::from_layer_count(1),
GpuLayerConfig::Count(1)
);
}
#[test]
fn placement_arg_len_matches_emitted_args() {
let placement = ModelPlacementConfig {
devices: vec!["gpu0".to_string(), "gpu1".to_string()],
gpu_layers: GpuLayerConfig::Count(99),
split_mode: SplitMode::Tensor,
main_gpu: Some(1),
tensor_split: vec![0.5, 0.5],
load_mode: ModelLoadMode::Mlock,
fit_params: true,
fit_params_min_ctx: Some(2048),
fit_params_target_bytes: vec![BYTES_PER_MIB_U64],
check_tensors: true,
no_extra_bufts: true,
no_host: true,
};
let mut args = Vec::with_capacity(placement.arg_len());
placement.push_args(&mut args);
assert_eq!(args.capacity(), args.len());
assert_eq!(arg_value(&args, "--device"), Some("gpu0,gpu1"));
assert_eq!(arg_value(&args, "--gpu-layers"), Some("99"));
assert_eq!(arg_value(&args, "--split-mode"), Some("tensor"));
assert_eq!(arg_value(&args, "--load-mode"), Some("mlock"));
assert!(args.iter().any(|arg| arg == "--no-host"));
}
#[test]
fn model_load_modes_match_llama_arguments() {
for (mode, expected) in [
(ModelLoadMode::Auto, "auto"),
(ModelLoadMode::None, "none"),
(ModelLoadMode::Mmap, "mmap"),
(ModelLoadMode::Mlock, "mlock"),
(ModelLoadMode::MmapMlock, "mmap+mlock"),
(ModelLoadMode::DirectIo, "dio"),
] {
let placement = ModelPlacementConfig {
load_mode: mode,
..ModelPlacementConfig::default()
};
let mut args = Vec::with_capacity(placement.arg_len());
placement.push_args(&mut args);
assert_eq!(args.capacity(), args.len());
assert_eq!(arg_value(&args, "--load-mode"), Some(expected));
}
}
#[test]
fn cpu_placement_omits_gpu_arguments() {
let placement = ModelPlacementConfig {
gpu_layers: GpuLayerConfig::Count(0),
..ModelPlacementConfig::default()
};
let mut args = Vec::with_capacity(placement.arg_len());
placement.push_args(&mut args);
assert_eq!(args.capacity(), args.len());
assert_eq!(arg_value(&args, "--gpu-layers"), None);
assert_eq!(arg_value(&args, "--split-mode"), None);
}