It would be nice to use #[serde(flatten)] on a BTreeMap etc., but serde can't decide whether the field is a cpu structure or a conventional parameter. The error shows:
thread 'main' panicked at 'called Result::unwrap() on an Err value: Error("invalid type: integer 123, expected struct Cpu", line: 8, column: 9)', src/main.rs:37:49
Another option would be to create a custom deserialization function for the cpu field. It could filter for the "cpu@" prefix which you show in your example. It then only flattens those entries with the prefix and ignores other values by deserializing them into IgnoredAny.
The code below does a bit too much. It strips the "cpu@" prefix and prevents the key from being borrowed. But it should give you an idea how everything would work together.