mirror of
https://github.com/huggingface/text-generation-inference.git
synced 2025-09-10 03:44:54 +00:00
add docker label in build
This commit is contained in:
parent
9763ff0989
commit
ce394f5d69
1
.github/workflows/build.yaml
vendored
1
.github/workflows/build.yaml
vendored
@ -97,6 +97,7 @@ jobs:
|
|||||||
platforms: 'linux/amd64'
|
platforms: 'linux/amd64'
|
||||||
build-args: |
|
build-args: |
|
||||||
GIT_SHA=${{ env.GITHUB_SHA }}
|
GIT_SHA=${{ env.GITHUB_SHA }}
|
||||||
|
DOCKER_LABEL=sha-${{ env.GITHUB_SHA_SHORT }}
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
cache-from: type=registry,ref=registry.internal.huggingface.tech/api-inference/community/text-generation-inference:cache,mode=max
|
cache-from: type=registry,ref=registry.internal.huggingface.tech/api-inference/community/text-generation-inference:cache,mode=max
|
||||||
|
@ -13,6 +13,7 @@ RUN cargo chef prepare --recipe-path recipe.json
|
|||||||
FROM chef AS builder
|
FROM chef AS builder
|
||||||
|
|
||||||
ARG GIT_SHA
|
ARG GIT_SHA
|
||||||
|
ARG DOCKER_LABEL
|
||||||
|
|
||||||
RUN PROTOC_ZIP=protoc-21.12-linux-x86_64.zip && \
|
RUN PROTOC_ZIP=protoc-21.12-linux-x86_64.zip && \
|
||||||
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/$PROTOC_ZIP && \
|
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/$PROTOC_ZIP && \
|
||||||
|
@ -2,11 +2,28 @@ use std::error::Error;
|
|||||||
use vergen::EmitBuilder;
|
use vergen::EmitBuilder;
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn Error>> {
|
fn main() -> Result<(), Box<dyn Error>> {
|
||||||
// Emit the instructions
|
// Emit cargo and rustc compile time values
|
||||||
EmitBuilder::builder()
|
EmitBuilder::builder().all_cargo().all_rustc().emit()?;
|
||||||
.all_cargo()
|
|
||||||
.all_git()
|
// Try to get the git sha from the local git repository
|
||||||
.all_rustc()
|
if EmitBuilder::builder()
|
||||||
.emit()?;
|
.fail_on_error()
|
||||||
|
.git_sha(false)
|
||||||
|
.emit()
|
||||||
|
.is_err()
|
||||||
|
{
|
||||||
|
// Unable to get the git sha
|
||||||
|
if let Ok(sha) = std::env::var("GIT_SHA") {
|
||||||
|
// Set it from an env var
|
||||||
|
println!("cargo:rustc-env=VERGEN_GIT_SHA={sha}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set docker label if present
|
||||||
|
if let Ok(label) = std::env::var("DOCKER_LABEL") {
|
||||||
|
// Set it from an env var
|
||||||
|
println!("cargo:rustc-env=DOCKER_LABEL={label}");
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
use std::process::Command;
|
|
||||||
|
|
||||||
pub fn nvidia_smi() -> Option<String> {
|
|
||||||
let output = Command::new("nvidia-smi").output().ok()?;
|
|
||||||
let nvidia_smi = String::from_utf8(output.stdout).ok()?;
|
|
||||||
let output = nvidia_smi.replace("\n", "\n ");
|
|
||||||
Some(output.trim().to_string())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn docker_image() -> Option<String> {
|
|
||||||
let output = Command::new("docker")
|
|
||||||
.args(&[
|
|
||||||
"image",
|
|
||||||
"inspect",
|
|
||||||
"--format",
|
|
||||||
"{{.RepoDigests}}",
|
|
||||||
"ghcr.io/huggingface/text-generation-inference:latest",
|
|
||||||
])
|
|
||||||
.output()
|
|
||||||
.ok()?;
|
|
||||||
let output = String::from_utf8(output.stdout).ok()?;
|
|
||||||
Some(output.trim().to_string())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn print_env() {
|
|
||||||
println!("Target: {}", env!("VERGEN_CARGO_TARGET_TRIPLE"));
|
|
||||||
println!("Cargo version: {}", env!("VERGEN_RUSTC_SEMVER"));
|
|
||||||
println!("Commit SHA: {}", env!("VERGEN_GIT_SHA"));
|
|
||||||
println!(
|
|
||||||
"Docker image sha: {}",
|
|
||||||
docker_image().unwrap_or("N/A".to_string())
|
|
||||||
);
|
|
||||||
let nvidia_smi = nvidia_smi().unwrap_or("N/A".to_string());
|
|
||||||
println!("Nvidia-smi:\n {}", nvidia_smi);
|
|
||||||
println!("Command line used: <FILL IN>");
|
|
||||||
println!("OS: <FILL IN>");
|
|
||||||
}
|
|
45
launcher/src/env_runtime.rs
Normal file
45
launcher/src/env_runtime.rs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
use std::fmt;
|
||||||
|
use std::process::Command;
|
||||||
|
|
||||||
|
pub(crate) struct Env {
|
||||||
|
cargo_target: &'static str,
|
||||||
|
cargo_version: &'static str,
|
||||||
|
git_sha: &'static str,
|
||||||
|
docker_label: &'static str,
|
||||||
|
nvidia_env: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Env {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
let nvidia_env = nvidia_smi();
|
||||||
|
|
||||||
|
Self {
|
||||||
|
nvidia_env: nvidia_env.unwrap_or("N/A".to_string()),
|
||||||
|
cargo_target: env!("VERGEN_CARGO_TARGET_TRIPLE"),
|
||||||
|
cargo_version: env!("VERGEN_RUSTC_SEMVER"),
|
||||||
|
git_sha: option_env!("VERGEN_GIT_SHA").unwrap_or("N/A"),
|
||||||
|
docker_label: option_env!("DOCKER_LABEL").unwrap_or("N/A"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Env {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
writeln!(f, "Runtime environment:")?;
|
||||||
|
|
||||||
|
writeln!(f, "Target: {}", self.cargo_target)?;
|
||||||
|
writeln!(f, "Cargo version: {}", self.cargo_version)?;
|
||||||
|
writeln!(f, "Commit sha: {}", self.git_sha)?;
|
||||||
|
writeln!(f, "Docker label: {}", self.docker_label)?;
|
||||||
|
write!(f, "nvidia-smi:\n{}", self.nvidia_env)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn nvidia_smi() -> Option<String> {
|
||||||
|
let output = Command::new("nvidia-smi").output().ok()?;
|
||||||
|
let nvidia_smi = String::from_utf8(output.stdout).ok()?;
|
||||||
|
let output = nvidia_smi.replace('\n', "\n ");
|
||||||
|
Some(output.trim().to_string())
|
||||||
|
}
|
@ -14,7 +14,7 @@ use std::time::{Duration, Instant};
|
|||||||
use std::{fs, io};
|
use std::{fs, io};
|
||||||
use subprocess::{ExitStatus, Popen, PopenConfig, PopenError, Redirection};
|
use subprocess::{ExitStatus, Popen, PopenConfig, PopenError, Redirection};
|
||||||
|
|
||||||
mod env_cli;
|
mod env_runtime;
|
||||||
|
|
||||||
/// App Configuration
|
/// App Configuration
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
@ -203,8 +203,7 @@ struct Args {
|
|||||||
#[clap(long, env)]
|
#[clap(long, env)]
|
||||||
watermark_delta: Option<f32>,
|
watermark_delta: Option<f32>,
|
||||||
|
|
||||||
/// Print a lot of information about your environment
|
/// Display a lot of information about your runtime environment
|
||||||
/// and exits.
|
|
||||||
#[clap(long, short, action)]
|
#[clap(long, short, action)]
|
||||||
env: bool,
|
env: bool,
|
||||||
}
|
}
|
||||||
@ -830,17 +829,17 @@ fn main() -> Result<(), LauncherError> {
|
|||||||
// Pattern match configuration
|
// Pattern match configuration
|
||||||
let args = Args::parse();
|
let args = Args::parse();
|
||||||
|
|
||||||
if args.env {
|
|
||||||
env_cli::print_env();
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.json_output {
|
if args.json_output {
|
||||||
tracing_subscriber::fmt().json().init();
|
tracing_subscriber::fmt().json().init();
|
||||||
} else {
|
} else {
|
||||||
tracing_subscriber::fmt().compact().init();
|
tracing_subscriber::fmt().compact().init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if args.env {
|
||||||
|
let env_runtime = env_runtime::Env::new();
|
||||||
|
tracing::info!("{}", env_runtime);
|
||||||
|
}
|
||||||
|
|
||||||
tracing::info!("{:?}", args);
|
tracing::info!("{:?}", args);
|
||||||
|
|
||||||
let num_shard = find_num_shards(args.sharded, args.num_shard);
|
let num_shard = find_num_shards(args.sharded, args.num_shard);
|
||||||
|
@ -15,5 +15,12 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
println!("cargo:rustc-env=VERGEN_GIT_SHA={sha}");
|
println!("cargo:rustc-env=VERGEN_GIT_SHA={sha}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set docker label if present
|
||||||
|
if let Ok(label) = std::env::var("DOCKER_LABEL") {
|
||||||
|
// Set it from an env var
|
||||||
|
println!("cargo:rustc-env=DOCKER_LABEL={label}");
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,8 @@ pub struct Info {
|
|||||||
pub version: &'static str,
|
pub version: &'static str,
|
||||||
#[schema(nullable = true, example = "null")]
|
#[schema(nullable = true, example = "null")]
|
||||||
pub sha: Option<&'static str>,
|
pub sha: Option<&'static str>,
|
||||||
|
#[schema(nullable = true, example = "null")]
|
||||||
|
pub docker_label: Option<&'static str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, ToSchema)]
|
#[derive(Clone, Debug, Deserialize, ToSchema)]
|
||||||
|
@ -635,6 +635,7 @@ pub async fn run(
|
|||||||
validation_workers,
|
validation_workers,
|
||||||
version: env!("CARGO_PKG_VERSION"),
|
version: env!("CARGO_PKG_VERSION"),
|
||||||
sha: option_env!("VERGEN_GIT_SHA"),
|
sha: option_env!("VERGEN_GIT_SHA"),
|
||||||
|
docker_label: option_env!("DOCKER_LABEL"),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Create router
|
// Create router
|
||||||
|
Loading…
Reference in New Issue
Block a user